У мене каталог з прапорами (/ прапорами), де вкілька каталогів - це ім'я файлу 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"; зроблено;