Насколько я помню, давным-давно я использовал такую вещь: в Total Commander я нажал F2 в диалоге копирования - добавил "задачу копирования" в "Очередь копирования". Итак, все эти файлы были скопированы последовательно. Есть ли какой-нибудь простой инструмент для такого "последовательного" копинга?

Изменить: я хотел бы добавить "копировать задачи" в очередь динамически.

Пример: у меня много тяжелых файлов. Я понимаю, что я хочу скопировать файл A. Пока файл A копируется, я понимаю, что я также должен скопировать файл B куда-нибудь, но мне нужно начать копирование сразу после того, как A уже скопировано.

1 ответ1

1

Я не уверен, что вы имеете в виду, это поведение по умолчанию команды копирования (cp):

  • Скопируйте много файлов:

    cp *txt *jpg destination_dir
    

Вот несколько примеров более сложных операций:

  1. Скопируйте все файлы, прочитанные из списка (при условии, что имена файлов нормальные, без пробелов или странных символов):

    while read n; do cp $n destination_dir < file_list.txt
    
  2. Как и выше, но работает для имен файлов с пробелами или странными символами:

    while IFS= read -r n; do cp "$n" destination_dir < file_list.txt
    
  3. Найдите все файлы, соответствующие шаблону, и скопируйте их:

    find . -name "*data*" -exec cp {} destination_dir \;
    
  4. Как и выше, но работает со странными именами файлов:

    find . -print0 -name "*data*" | xargs -0 cp -t destination_dir \;
    

Я до сих пор не понимаю, почему вы хотели бы сделать это, но хорошо. Чтобы добавить операцию копирования, которая будет выполнена после окончания текущей, вы можете сделать это:

  1. Создайте список файлов, которые вы хотите скопировать. Поскольку вы начинаете с одного файла, список будет содержать только одно имя файла:

    echo "fileA" > list.txt
    
  2. Начните копирование файла, прочитав список (как и раньше, предполагается, что имена файлов нормальны , используйте пример 2 из списка выше, если имя вашего файла может содержать пробелы или странные, не буквенно-цифровые символы):

    while read n; do cp -v $n destination_dir < file_list.txt
    
  3. Найдите следующий файл, который вы хотите скопировать, и добавьте его в список:

    echo "fileB" >> list.txt
    

Если вы выполните шаг 3 до завершения копирования, следующий файл будет скопирован, как только будет сделан первый.

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .