487個のフォルダがあるというフォルダがあります/home/user/temps
。各フォルダにはThumb.pngというファイルがあります。
Thumb.pngという名前のすべてのファイルを別のフォルダにコピーし、元のフォルダに応じて名前を変更したいと思います。
ベストアンサー1
ここにあります:
for file in /home/user/temps/*/thumb.png; do new_file=${file/temps/new_folder}; cp "$file" "${new_file/\/thumb/}"; done;
編集する:
ところで、一般的な通念はこうするのがfind
悪い考えだということです。単にシェル拡張を使用する方がより安定しています。また、これは仮説です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
ファイル名のスペース、改行などを処理するために重要です。