Shell

如何在“查找”功能 Linux 中複製和重命名文件?

  • April 27, 2021

我有一個名為的文件夾/home/user/temps,其中包含 487 個文件夾。在每個文件夾中,我都有一個名為 thumb.png 的文件。

我想將所有名為 thumb.png 的文件複製到一個單獨的文件夾中,並根據它們來自的文件夾重命名它們。

幹得好:

for file in /home/user/temps/*/thumb.png; do new_file=${file/temps/new_folder}; cp "$file" "${new_file/\/thumb/}"; done;

編輯:

順便說一句,規範的智慧是,使用find它是一個壞主意——簡單地使用 shell 擴展更可靠。此外,這是假設bash,但我認為這是一個安全的假設:)

編輯2:

為了清楚起見,我將其分解:

# shell-expansion to loop specified files
for file in /home/user/temps/*/thumb.png; do

   # replace 'temps' with 'new_folder' in the path
   # '/home/temps/abc/thumb.png' becomes '/home/new_folder/abc/thumb.png'
   new_file=${file/temps/new_folder};

   # drop '/thumb' from the path
   # '/home/new_folder/abc/thumb.png' becomes '/home/new_folder/abc.png'
   cp "$file" "${new_file/\/thumb/}";
done;

${var/Pattern/Replacement}可以在此處找到有關構造的詳細資訊。

行中的引號cp對於處理文件名中的空格和換行符等很重要。

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