Используйте find
и его опцию -exec
(здесь используется GNU find
для предиката -regex
):
find . -regextype posix-egrep -regex '.*/aaa_bbb_ccc_ddd_(cost|revenue|benefit|profit|loss)_[[:alpha:]]+_[0-9]+\.csv\.gz' -exec mv {} "$DESTN_DIR" \;
Примечание:
find .
указывает find
искать файлы, начинающиеся в текущем каталоге.
По умолчанию GNU find
использует регулярные выражения в стиле emacs. Я предпочитаю -regextype posix-egrep
, но вы можете перейти на любой из поддерживаемых стилей, с которыми вы знакомы.
Для выбора файлов используется регулярное выражение: -regex '.*/aaa_bbb_ccc_ddd_(cost|revenue|benefit|profit|loss)_[[:alpha:]]+_[0-9]+\.csv\.gz'
. Это позволяет использовать стандартный префикс aaa_bbb_ccc_ddd_
, за которым следует одно из слов, указанных (cost|revenue|benefit|profit|loss)
, за которым следует другое неопределенное слово, _[[[:alpha:]]+
, за которым следует дата, _[0-9]+
, за которым следует желаемое расширение . csv.gz
. Возможно, вы захотите уточнить это.
Все найденные файлы будут перемещены в целевой каталог с помощью команды -exec mv {} "$DESTN_DIR" \;
. Когда find
находит подходящий файл, он выполняет эту команду, заменяя {}
именем файла. Это сработает, даже если в именах файлов есть пробелы, новые строки или другие сложные символы.
Стиль regex по умолчанию для GNU find
требует некоторого экранирования операторов группировки и чередования:
find . -regex '.*/aaa_bbb_ccc_ddd_\(cost\|revenue\|benefit\|profit\|loss\)_[[:alpha:]]+_[0-9]+\.csv\.gz' -exec echo mv {} targetdir \;
Версия find
для Mac OSX (man page here) поддерживает -regex
, но не -regextype
. Однако я не удивлюсь, если синтаксис regex потребует некоторых тонких изменений.
Страница руководства для версии find
для IBM AIX находится здесь. Она не поддерживает -regex
.
Я бы nice -n 19
процесс резервного копирования (дал низкий приоритет ЦП )и, возможно, такжеionice -c 3
(ввод-вывод в режиме ожидания ).
rsync также будет значительным улучшением (он не будет каждый раз копировать 100Gb ). Например, мои сценарии резервного копирования выглядят так:
SOURCE=/whatever/precious/directory
DESTINATION=/media/some_usb_drive/backup
nice -n 19 rsync --verbose --archive --compress --delete --force --recursive --links --safe-links --rsh ssh --exclude-from=$EXCLUDEFILE $SOURCE $DESTINATION
# or
nice -n 19 ionice -c 3 rsync --verbose --archive --compress --delete --force --recursive --links --safe-links --rsh ssh --exclude-from=$EXCLUDEFILE $SOURCE $DESTINATION
(exclude -from используется, чтобы избежать каталогов.cache, файлов.o и т. д.)