Просматривать файловую систему и перемещать файлы

Просматривать файловую систему и перемещать файлы

Мне нужно написать скрипт, который будет переходить по списку каталогов, а затем перемещать файлы ненужных типов в другой каталог.

С кодом ниже я могу перебрать все папки в каталоге и вывести их имена. Я полагаю, что мне нужно будет входить и выходить из этих папок.

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из этих каталогов в нужный каталог. Поскольку мы используем здесь абсолютные пути, вы можете запустить этот скрипт из любого места.

Связанный контент