Find

以修改後的名稱複製文件

  • June 21, 2018

我必須找到以數字結尾的目錄中的所有文件(這部分沒問題)並以修改後的名稱複製它們(我不知道如何做這部分)。通常:

find $folder -maxdepth 1 -type f -name '*-[0-9]\.jpg'

將所有這些文件複製到同一目錄,並命名它們$originalName-mini.jpg

find+**bash**解決方案:

find $folder -maxdepth 1 -type f -name "*-[0-9].jpg" -exec \
bash -c 'cp "$1" "${1:0:-4}-mini.jpg"' _ {} \;

您實際上並不需要find這裡,因為您只是在單個目錄中查找,只需一個 shell 循環就可以完成這項工作。您也不需要在文件名通配模式中轉義點。

for pathname in "$folder"/*-[0-9].jpg; do
   [ -f "$pathname" ] && cp "$pathname" "${pathname%-[0-9].jpg}-mini.jpg"
done

參數替換從 的值的末尾${variable%pattern}刪除。pattern``variable

測試-f絕對確保我們正在處理一個正常文件(或一個符號連結)而不是一個錯誤命名的目錄。


用來find做同樣的事情:

find "$folder" -maxdepth 1 -type f -name '*-[0-9].jpg' -exec sh -c '
   for pathname do
       cp "$pathname" "${pathname%-[0-9].jpg}-mini.jpg"
   done' sh {} +

引用自:https://unix.stackexchange.com/questions/449965