perl -i.bak -pe 's/[^[:ascii:]]//g' file
Добавление косой черты в конце пути назначения /opt/alfresco/archived/2020-01-07
привело бы к ошибке команды mv
, поскольку каталога 2020-01-07
, очевидно, не существует. Это спасло бы ваши файлы.
Они также были бы сохранены, если бы /opt/alfresco/archived/2020-01-07
был существующим каталогом (, независимо от того, есть ли косая черта в конце пути назначения или нет ), и ваши файлы были бы перемещены в этот каталог (конфликты имен файлов все еще могут быть проблемой, когда вы перемещаете файлы из нескольких каталогов в один каталог ). Это то, что вы хотели сделать. Что вы забыли сделать, так это сначала создать этот каталог.
Теперь, поскольку каталога не существовало, команда find
брала каждый отдельный файл XML и PDF, переименовывала его в /opt/alfresco/archived/2020-01-07
, а затем продолжала делать то же самое со следующим файлом, перезаписывая предыдущий..
Файл /opt/alfresco/archived/2020-01-07
теперь является последним файлом XML или PDF, найденнымfind
.
Также обратите внимание, что, поскольку вы запускали команду find
через /opt/alfresco
, любой файл PDF или XML ниже этого пути, например, в любом каталоге ниже /opt/alfresco/archived
, постигла бы та же участь.
Так легко совершить ошибку. Не существует удобного способа восстановить потерянные файлы, кроме как восстановить их из резервных копий.
Если вы не выполняете ежечасное резервное копирование своих данных, возможно, сейчас самое время начать это делать. Я бы порекомендовал restic
или borgbackup
для резервного копирования личных файлов, предпочтительно на какой-нибудь сторонний -сайт или, по крайней мере, на внешнее хранилище.
Следующие вопросы и ответы могут быть вам полезны:
При следующем переписывании этого скрипта вы можете игнорировать подкаталог archived
и использовать mv -n -t
. Вам также необходимо явно указать -print
найденные файлы (или использовать mv -v
), так как find
иначе не выведет их местоположение:
find /opt/alfresco \
-path /opt/alfresco/archived -prune -o \
-type f \( -iname '*.pdf' -o -iname '*.xml' \) \
-exec mv -n -t /opt/alfresco/archived/2020-01-07 {} + \
-print >/opt/alfresco/scripts/move.log
Несколько вещей из комментариев (ниже ), которые могут быть полезны:
Если GNU mv
используется с -t target
, произойдет сбой, если target
не является каталогом. Вы можете использовать -exec mv -t /opt/alfresco/archived/2020-01-07 {} +
для одновременного перемещения нескольких файлов с помощью find
(, что также ускорит операцию ).
Если GNU mv
используется с -n
, он откажется перезаписывать существующие файлы.
Ни -t
, ни -n
не являются стандартными (macOS и FreeBSD тоже имеют -n
, хотя ), но это не должно мешать вам использовать их в сценариях, которые не должны быть переносимыми между системы.