Мне нужен скрипт (может быть, bash, ksh или любой другой), который копирует для целей резервного копирования все подкаталоги и файлы каталога: .znc - но .log файлы.

Структура выглядит так:

.znc/ пользователей
.znc/ users/ username/ moddata/
.znc/ users/ username/ moddata/ log
.znc/ users/ username/ moddata/ log/ files.log
.znc/ users/ username2/ moddata/
.znc/ users/ username2/ moddata/ log
.znc/ users/ username2/ moddata/ log/ files.log

Обратите внимание, что это только часть структуры, но у меня возникли проблемы.

Мне нужно скопировать все содержимое .znc/, но файлы с расширением "log". Я не смог ничего сделать с помощью find или grep , потому что есть переменная username.

2 ответа2

1

Вы можете использовать rsync. У этого также есть хорошая особенность, что это сохраняет владельца / группу / завивки и т.д.

rsync -avi --exclude '*.log' .znc/ /path/to/destination/directory/
1

С верхней части моей головы:

cd /to/top/of/dir/structure
tar -cvf /path/to/tarfile.tar $(find . -type f ! -name '*.log')

Это не будет работать, если файлы имеют пробелы.

Это может работать, если в именах файлов есть пробелы

cd /to/top/of/dir/structure
tar -cf /path/to/tarfile.tar --files-from /dev/null # trick to create empty tar file
find . -type f ! -name '*.log' -print0 | xargs -0 tar -uvf /path/to/tarfile.tar

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