2

Недавно мой второй жесткий диск в прошлом семестре начал выходить из строя, и я не мог найти новый диск. У меня все еще был первый жесткий диск, который вышел из строя, поэтому мы привидели этот диск, но теперь мне нужно получить все файлы и вещи, которые изменились с даты первого появления (первое неудачное HD -> второе неисправное HD) на новый диск (все файлы на втором не удалось hd с даты -> третий рабочий hd). Есть ли простой способ написать это в терминале Linux или использовать другую программу?

Я рассмотрел использование следующих команд, но они не увенчались успехом и потерпели неудачу после того, как первые несколько папок были заархивированы:

find . -type f -mtime -58 |xargs tar --no-recursion -czvf allmodified.tgz

tar czvf allmodified.tgz `find . -type f -mtime -58`

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

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

Любые подсказки помогают, большое спасибо!

1 ответ1

2

Вероятно, они терпят неудачу, потому что вы не защитились от пробелов в именах файлов во втором примере. Вызов немного отличается:

find . -type f -mtime -58 -print0 | tar -czvf allmodified.tar.gz --null -T -

Здесь find пути к выходным файлам, оканчивающиеся символами NUL . Они передаются в tar , который читает входные данные из stdin (-T -), разделенные нулем (--null). --no-recursion не обязателен, так как вы не будете включать сами каталоги в свой tarball.

Смотрите также: GNU tar 1.27: 6.3 Чтение имен из файла

Затем вы можете извлечь архив из того же каталога, в котором вы его взяли, и он поместит файлы в каталоги, к которым они принадлежат. Обратите внимание, что tar будет перезаписывать существующие файлы после извлечения. Чтобы предотвратить это, используйте параметр --skip-old-files .


Что касается вашего второго примера, он потерпит неудачу, если файл или путь содержит пробелы, потому что tar видит два файла foo bar и baz (которые find выходные данные) как три, то есть tar foo bar baz . Правильный способ справиться с этим - перенаправить вывод команды find с -print0 на следующую команду, если у этой команды есть переключатель для чтения с ввода, ограниченного NUL (что делает большинство утилит GNU).

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