Как я могу использовать терминал / команды Linux, чтобы рекурсивно искать диск изображения (jpg) и скопировать их в мой рабочий стол, переименовывая все найденные файлы с помощью чисел. Так в первый раз это находки должны быть скопированы в рабочий стол как 1.jpg, второй файл должен быть скопирован как 2.jpg, и 50,000-й файл должен быть скопирован как 50000.jpg и так далее.
n=1; for file in $(find /media/foo/ -name '*.jpg'); do cp $file ~/Desktop/$n.jpg; n=$((n + 1)); done
Здесь существует две проблемы.
Для первой проблемы очевидное и правильное решение find
, который, к счастью, делает это очень легким.
find / -type f -iregex '.*\.jpe?g$'
Конечно, это могло быть сделано более сложным, если бы Вы хотели, например, действительно вводите обнаружение с file
вместо следовательно.
Второй проблемой является последовательное копирование. Простой счетчик - все, что необходимо для создания этой работы.
n=1
cp "$source" "$dest/$n.jpeg"
n=$((n + 1 ))
Выполнение этой внутренней части цикл, конечно, где $source
изменения на каждом повторении.
Соединение всего этого
#!/usr/bin/env bash
usage() {
echo "$0: usage: $0 [source directory] [destination directory]"
}
if [ ${#@} -ne 2 ] ; then
usage
exit
fi
scan="$1"
dest="$2"
if [ ! -d "$scan" ] ; then
usage
printf "\nspecified source does not exist or is not a directory\n"
exit
fi
if [ ! -d "$dest" ] ; then
usage
printf "\nspecified destination does not exist or is not a directory\n"
exit
fi
n=1
while read -r -d $'\0' source ; do
cp "$source" "$dest/$n.jpeg"
n=$((n + 1 ))
done < <(find "$scan" -type f -regextype posix-extended -iregex '.*\.jpe?g$' -print0)
Примечание мобильности: -regextype
GNU, находят расширение; без него -iregex
может не соответствовать именам файлов, содержащим новые строки.