Итак, у меня есть список файлов в текстовом файле. Я считаю, что это около 100 000 файлов.

Файлы в указанном списке распределены по многим каталогам, имеют разные размеры, имена файлов, расширения, возраст и т.д.

Я пытаюсь найти способ переместить эти файлы и только эти на другой диск.

Осложняющий фактор: некоторые файлы имеют одинаковые имена, но не совпадают с файлами. Их нельзя просто переместить в одну папку с политикой перезаписи или игнорирования кратных.

Желательно, чтобы они сохранили свою структуру каталогов, но имели только те файлы, которые мне нужны, внутри целевого каталога. (целевой диск недостаточно большой, чтобы просто копировать все).

Ниже приведен пример некоторых строк в файле:

    media/dave/xdd/cruzer/F#(NTFS 1)/Raw Files/Portable Network Graphic file/3601-3900/FILE3776.PNG/Windows/winsxs/amd64_microsoft-windows-o..disc-style-memories_31bf3856ad364e35_6.1.7600.16385_none_51190840a935f980/Title_mainImage-mask.png

media/dave/xdd/d1/other/hd1/Program Files/DVD Maker/Shared/DvdStyles/Memories/Title_content-background.png

Я пытался использовать

    rsync -a --files-from=/sourcefile.txt / /media/destinationhdd

Тем не менее, это просто пытается скопировать мой корневой каталог в место назначения. Помогите пожалуйста, как мне просто скопировать проклятые файлы, которые я хочу?

1 ответ1

1

Я предполагаю Unix-подобную среду, поэтому я напишу это в скрипте bash, но концепция более или менее одинакова для аналогичных языков сценариев ...

Запустите этот скрипт в каталоге, в котором файлы в списке файлов относятся к ...

#!/bin/sh

# (naive) File migration script

IFS=$'\n'
destination_path = "/path/to/destination/here/"

for file in `cat filelist.txt`
do
    cp -v --parents $file $destination_path
done

Это достигается тем, что вы сохраняете структуру исходного родительского каталога при копировании в указанное место назначения. rsync отлично подходит для резервного копирования целых наборов файлов, которые вы регулярно обновляете, поскольку именно для этого настроен алгоритм. Но для более простых операций базовые команды Unix, заключенные в простой скрипт, более чем достаточны. Обратите внимание, что это также устанавливает переменную bash IFS которая обычно состоит из <space><tab><newline> хотя эта настройка, вероятно, не будет сохранена при выходе из скрипта.

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