рекурсивная копия файла

Как я могу использовать терминал / команды Linux, чтобы рекурсивно искать диск изображения (jpg) и скопировать их в мой рабочий стол, переименовывая все найденные файлы с помощью чисел. Так в первый раз это находки должны быть скопированы в рабочий стол как 1.jpg, второй файл должен быть скопирован как 2.jpg, и 50,000-й файл должен быть скопирован как 50000.jpg и так далее.

2
задан 28.12.2010, 18:53

2 ответа

n=1; for file in $(find /media/foo/ -name '*.jpg'); do cp $file ~/Desktop/$n.jpg; n=$((n + 1)); done
2
ответ дан 09.01.2020, 03:28

Здесь существует две проблемы.

  1. Нахождение ряда jpeg файлы.
  2. Копирование ряда файлов к целевому каталогу с последовательными, пронумерованными именами.

Для первой проблемы очевидное и правильное решение 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 может не соответствовать именам файлов, содержащим новые строки.

0
ответ дан 09.01.2020, 03:28

Теги

Похожие вопросы