
Мне нужно написать скрипт, который будет переходить по списку каталогов, а затем перемещать файлы ненужных типов в другой каталог.
С кодом ниже я могу перебрать все папки в каталоге и вывести их имена. Я полагаю, что мне нужно будет входить и выходить из этих папок.
for d in */
do
echo "$d"
done
Приведенный ниже код будет перебирать каждый файл .png и перемещать его в нужный каталог.
for file in *.png
do
mv "$file" /desired/directory
done
теперь по какой-то причине, когда я вставляю второй блок кода в первый, я получаю такой вывод:
mv: cannot stat ‘*.png’: No such file or directory
Как мне заставить его пройти и переместить каждый файл? Я хотел бы разместить этот скрипт в корне /search/directory/
решение1
for d in */
do
mv - n *.png /desired/directory/
done
Будет проблема с файлами с тем же именем, что и первый, который будет записан, а следующий - нет, так как установлен тег -n, в противном случае второй файл перезапишет первый и первый файл будет потерян. Это не скопирует файлы в подкаталоге sub
Поцарапайте, что использовать
find /search/directory/ -inane "*.png" -exce mv -n {} /desired/directory/ \;
Но будет та же проблема с файлами с одинаковыми именами.
Если вы хотите дублировать именованные файлы, например, Pic.png 1Pic.png 2Pic.png и т. д.
dup=1
find /search/directory/ -inane "*.png" -exce mv -n {} /desired/directory/ \;
while(find /search/directory/ -inane "*.png" | wc -l !=0)
find /search/directory/ -inane "*.png" -exce mv -n {} /desired/directory/$dup$(basename {}) \;
dup++
done
Этот цикл не прервется, если /desired/directory находится в /search/directory. Я сделал это с ходу, единственное, что меня беспокоит, это условие while, которое может потребовать find | wc в скобках, возможно, с $ в начале. Это можно улучшить еще больше, проверив ошибки и используя .png /search/directory /desired/directory в качестве аргументов.
решение2
Это должно сделать:
#!/bin/bash
for dir in /full/path/to/recup_Dir.{1..976}; do
mv "$dir"/*.png /full/path/to/desired/directory/
done
Здесь мы проходим по исходным каталогам, а затем копируем все файлы .png
из этих каталогов в нужный каталог. Поскольку мы используем здесь абсолютные пути, вы можете запустить этот скрипт из любого места.