我正在尝试使用空格来获取文件名 让他们进入for循环 压缩每个文件 拉链后,请使用以下内容删除原件:
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
实际的zip命令,它取自" for"条件稍后会取出每个文件,制作一个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"循环,然后继续压缩每个文件并进一步? 任何帮助将不胜感激。
答案 0 :(得分:1)
操作文件时始终使用双引号。
例如,参见下面的代码将创建一个名为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"