不能在 shell 脚本中采用带有空格的文件名进行循环



我正在尝试使用空格的文件名让他们进入循环zip每个文件拉链后,使用以下以下删除原件:

for appdir in $(ls /home/location/$dirname); do
  for logFile in $(find /home/location/$dirname/$appdir -type f -mtime +10 ( ! -iname "*.zip" ! -iname "*.gz" )); do
    echo $logFile

文件我正在尝试拉动具有空间的拉链:

/home/location/hdd1/domain/servername/EXT1/ET SOME To FILENAME/xml/sdlfkd.xml
/home/location/hdd1/domain/servername/EXT1/ET SOME To FILENAME2/xml/sd2fkd.xml

我知道可以将带有空间的文件名制作到一个单个文件名中,如以下 -

find /location/$appdir -type f -mtime +10  -print0 | xargs -0 ls

从" for"条件中获取文件名的实际ZIP命令以后出现每个文件,制作zip并删除原始文件。

我在zip命令中遇到以下错误:

[stdout: 4]                           zip warning: name not matched: ET
zip error: Nothing to do! (ET.zip)
[stdout: 4]           SOME
[stdout: 4]                           zip warning: name not matched: SOME
zip error: Nothing to do! (SOME.zip)

如何修改我可以每次为" for"循环提供整个文件名的条件,然后继续进行缩进每个文件并走得更远?任何帮助将不胜感激。

操纵文件时始终使用双引号。

参见例如,下面的代码将创建一个称为A B C:

的唯一文件
will /home/will/a # touch "a b c"
will /home/will/a # ls -l
total 0
-rw-r--r--    1 root     system            0 Sep 21 08:47 a b c

这将创建3个不同的文件,称为A,B和C

will /home/will/a # touch a b c
will /home/will/a # ls -l
total 0
-rw-r--r--    1 root     system            0 Sep 21 08:47 a
-rw-r--r--    1 root     system            0 Sep 21 08:47 b
-rw-r--r--    1 root     system            0 Sep 21 08:47 c

所以现在想象我不会创建,而是要删除或更改这些文件,如果文件名不是预期的文件,则可能会更加有害。

在您的情况下,我会尝试以下操作:

   for appdir in $(ls "/home/location/$dirname"); do
  for logFile in $(find "/home/location/$dirname/$appdir" -type f -mtime +10 ( ! -iname "*.zip" ! -iname "*.gz" )); do
    echo "$logFile"

最新更新