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

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

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

2
задан 26 February 2014 в 07:43

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
ответ дан 26 February 2014 в 07:43

Сначала используйте 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
ответ дан 26 February 2014 в 07:43

Другие вопросы по тегам:

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