/ / Як скопіювати всі файли Norway.png в один каталог рекурсивно з іменем Bouvet-Island.png в Linux - linux, unix

Як копіювати всі файли Norway.png в ту ж директорію рекурсивно з ім'ям Bouvet-Island.png в Linux - linux, unix

У мене каталог з прапорами (/ прапорами), де вкілька каталогів - це ім'я файлу Norway.png. Оскільки прапора острова Буве немає, Норвегія еквівалентна цій країні (Island), мені просто потрібно скопіювати весь файл Norway.png в той самий каталог з назвою Bouvet-Island.png.

(Ось прапори: https://downloads.gosquared.com/pixels/flags.zip)

Розглянемо, що кожен Norway.png є в різних каталогах і має різні розміри.

Я спробував щось подібне:

#!/bin/bash

echo "Renaming..."

# shell-expansion to loop specified files
for file in /var/www/images/flags/*/Norway.png; do

cp "$file" "Bouvet-Island.png";
done;

Але я отримую це повідомлення:

cp: target ‘./flags/shiny/16/Norway.png’ is not a directory
cp: target ‘./flags/shiny/48/Norway.png’ is not a directory
cp: target ‘./flags/shiny/24/Norway.png’ is not a directory
cp: target ‘./flags/shiny/32/Norway.png’ is not a directory
cp: target ‘./flags/shiny/64/Norway.png’ is not a directory
cp: target ‘./flags/flat/16/Norway.png’ is not a directory
cp: target ‘./flags/flat/48/Norway.png’ is not a directory
cp: target ‘./flags/flat/24/Norway.png’ is not a directory
cp: target ‘./flags/flat/32/Norway.png’ is not a directory
cp: target ‘./flags/flat/64/Norway.png’ is not a directory

Відповіді:

2 для відповіді № 1

Використовуючи find з -exec варіанти:

find /var/www/images/flags -name Norway.png 
-exec sh -c "cp {} $(dirname {})/Bouvet-Island.png" ;

0 для відповіді № 2

Можливо, Норвегія.png є не у всіх каталогах. Ви можете додати чек, як показано нижче для файлу в /var/www/images/flags/*/Norway.png; робити if (-f $ файл) cp "$ file" "Bouvet-Island.png"; зроблено;