將 sed 傳遞給臨時變數

將 sed 傳遞給臨時變數

我正在嘗試批量更改 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 完成其工作並刪除結尾。這個功能被稱為參數擴充

相關內容