因此,在一個bash腳本中,我有以下非常簡單的行,但我怎樣才能鏈接它進一步移動文件?在unix中,找到並壓縮它後,用xargs移動文件?
find . -type f -ctime -$2 -name "mylog*.log" | xargs bzip2
這工作正常,但我也想將文件移動到一個新的目錄,一旦我完成了bzip2。
因此,在一個bash腳本中,我有以下非常簡單的行,但我怎樣才能鏈接它進一步移動文件?在unix中,找到並壓縮它後,用xargs移動文件?
find . -type f -ctime -$2 -name "mylog*.log" | xargs bzip2
這工作正常,但我也想將文件移動到一個新的目錄,一旦我完成了bzip2。
一個標準技巧是使用一個新的腳本,做任何你需要的。在這裏,我假定${OTHER_DIRECTORY}
是一個環境變量,表示在哪裏放置壓縮文件,但是有很多其他(更好的)方法可以將該信息提供給腳本(例如將目錄指定爲第一個參數)最後一個論點是一個壞主意)。
#!/bin/bash
for file in "[email protected]"
do
bzip2 "$file"
mv "$file.bz2" "${OTHER_DIRECTORY:-/tmp}"
done
然後你可以find
運行該腳本:
find . -type f ctime -$2 -name "mylog*.log" -exec tinyscript.sh {} +
這是非常有效的。如果你只想要一個mv
命令,你可以考慮沿着線的東西:
bzip2 "[email protected]"
bz2=()
for file in "[email protected]"; do bz2+=("$file.bz2") done
mv "${bz3[@]}" "${OTHER_DIRECTORY:-/tmp}"
此代碼即使路徑名稱包含空格和其他不良字符。
一種選擇可能是這樣的:
find . -type f -ctime -$2 -name "mylog*.log" -exec bzip2 {} \; -exec mv {} /path/to/new_dir/ \;
'mv'會得到舊的文件名並失敗,不是嗎? –
你好,它似乎沒有與MV – user3761584
工作我的意思是附加.bz2後{}確實做到這一招艱難,即使它不完全乾淨。 – user3761584
謝謝,似乎這樣做 – user3761584