Удаление имен сокращенных каталогов из вывода команды find

Обычный метод (пишу по памяти):

NEWBACKUP=`date +%s` # or some other format
cp -al "$OLDBACKUP" "$NEWBACKUP"
rsync -aH --delete "$SOURCE" "$NEWBACKUP"

Посмотрите Easy Automated Snapshot-Style Backups with Linux and Rsync

Существует также --link-dest опция rsync, которую я никогда не исследовал должным образом.

3
02.08.2017, 02:12
4 ответа

За счет некоторых дополнительных операций с файловой системой поиск ограничивается простыми файлами. Это исключит каталог exclude, потому что это не файл :

.
find. \( -name '*.c' -o -name '*.h' -o -path '*/exclude' -prune \) -type f
0
27.01.2020, 21:15
find. -name excludeme -prune -o \
  \( -name '*.c' -o -name '*.h' \) -print

Помните, что И(неявный )имеет приоритет над ИЛИ(-o). (см. также-name '*.[ch]')

6
27.01.2020, 21:15

Эта команда возвращает то, что вы просите:

find. \( -name '*.c' -o -name '*.h' \) -a \! \( -path './exclude/*' \)

0
27.01.2020, 21:15

Самое простое изменение — заменить-prune(больше не искать в этом каталоге )на-prune -false(больше не искать в этом каталоге, и это не соответствует ).

0
27.01.2020, 21:15

Теги

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