
我正在嘗試批量更改 bash 中的一些文件,這些文件的擴展名包含空格和不需要的結尾。
例如來自
abc.pdf.!ut.!ut
到
abc.pdf
如果我做的事情比實際應該的更難,我會展示全部進展。所以一開始我從類似的事情開始
for file in `find /Users/phwd/Desktop/Film\ Sheet\ Music\ Scores\ 2 *.\!ut.\!ut`;
do
mv $file `echo $file | sed 's/\(.*\)\.\!\ut\.\!\ut/\1/'`;
done
發送 mv 時,上面的內容不適用於空格,所以我改為此
find /Users/phwd/Desktop/Film\ Sheet\ Music\ Scores\ 2 *.\!ut.\!ut | while read file
do
mv $file `echo $file | sed 's/\(.*\)\.\!\ut\.\!\ut/\1/'`;
done
這幾乎有效,但 mv 開始說出任意訊息
usage: mv [-f | -i | -n] [-v] source target
mv [-f | -i | -n] [-v] source ... directory
我想太多了嗎?
答案1
所以如果你只是想刪除結尾!ut.!ut
我會建議這樣的:
for file in `find ...`; do
mv "$file" "${file%.\!ut.\!ut}"
done
在這種情況下,shell 完成其工作並刪除結尾。這個功能被稱為參數擴充。