Инструмент или команда для перемещения нескольких файлов из нескольких папок в одно место (без перезаписи)

В настоящее время я работаю над восстановлением некоторых файлов журналов из случайных резервных копий, которые я сделал. У меня 48 файлов в 70+ папках.

Как я могу переместить эти 48 файлов в одну папку, не перезаписывая файлы с одинаковыми именами? Большинство этих файлов имеют одинаковое имя, но разный размер, я проверил с помощью fdupes.

2
задан 13.05.2020, 18:48

2 ответа

Введите эту команду в своем терминале ( Ctrl + Alt + T , чтобы открыть ее):

find $LOG_DIR -type f | xargs -I {} sh -c 'base=$(basename "$1"); name=${base%.*}; ext=${base##*.}; mv "$1" "$OUTPUT_DIR/$name`date +%N`.$ext"' -- {}

По сути, он найдет все ваши файлы в $ LOG_DIR (который вы должны заменить замещением родителя из ваших 70 папок), извлечет имя без пути ( basename ), разделит имя и расширение а затем переместите их в $ OUTPUT_PATH (замените тем, куда вы хотите, чтобы они пошли) и добавьте число наносекунд в это время ( data +% N ) к имени, чтобы не перезаписывать.

PS: я получил небольшую помощь оттуда: StackOverflow

0
ответ дан 13.05.2020, 18:48
  • 1
    Привет, спасибо за ответ! Я попробовал команду, хотя я, возможно, неправильно понял вещь $LOG_DIR и $OUTPUT_PATH. Я попробовал этот путь: " " найдите $USER Terminalling/a1command/extract_these_files/...." " и также: " " найдите Terminalling/a1command/extract_these_files/..." ". так или иначе я добрался: " " mv: не может статистика ‘thisisalogfile.log’: Никакой такой файл или directory" " или " " mv: цель ‘Terminalling/a1command/excerpt/757786046thisisalogfile.log’ не является directory" ". вот то, что я сделал: pastebin.com/mZGvUp8t – Disillusioned 13.05.2020, 18:49
  • 2
    mv: не может создать регулярный файл †/thisisalogfile412781517.log’: Разрешение отклонено.---попробовал команду, как это от родительской папки – Guillermo Gutiérrez 13.05.2020, 18:49
  • 3
    Попробуйте эту новую строку. Я протестировал его с, входит в систему тестовая папка, запуская его из моего дома. – Disillusioned 13.05.2020, 18:49
  • 4
    Да, это - папка. Я попробовал команду из родительского каталога, но тот же результат. (и из папки, где файл, он только переименовал его), I' m предположение команды нуждается в рекурсивном поиске во всех существующих подкаталогах и перемещении найденных файлов к другой папке. – user21576 13.05.2020, 18:50
  • 5
    Мое плохое, эта строка только работает если you' ре в той же папке, чем файлы Вы хотите переместиться. I' ll редактируют мой ответ. И what' s Terminalling? Папка? – Mike 13.05.2020, 18:50

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

find /dir/with/scattered/logs -type f

Это просто напечатает список файлов. Если вы довольны этим, просто используйте cp с опцией резервного копирования, это «сделает резервную копию каждого существующего файла назначения». Поскольку вы сказали, что имена не имеют большого значения, это должно быть хорошо. К файлам резервных копий будет добавлено «~». См. man cp для лучшего контроля над этой функцией.

find /dir/with/scattered/logs -type f -exec cp -b {} /destination/directory \;

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

0
ответ дан 13.05.2020, 18:49

Теги

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