Shell
如何在“查找”功能 Linux 中複製和重命名文件?
我有一個名為的文件夾
/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
對於處理文件名中的空格和換行符等很重要。