Как исключить папку при выполнении файловых операций, например cp и т. Д.
В настоящее время я бы использовал подстановочную карту *, чтобы применить файловую операцию ко всем, но мне нужно исключить одну отдельную папку.
На самом деле я хочу использовать команду chown
чтобы изменить владельца всех файлов в каталоге, но мне нужно исключить один подкаталог.
Обратное сглаживание:
Вы хотите обратный матч шара, я бы сделал так:
Вы можете выполнить обратное сопоставление с более новым bash, если включите расширенную подстановку. Например, чтобы сопоставить все, что не содержит foo или bar в имени:
shopt -s extglob
echo !(*foo*|*bar*)
Или просто все, что не имеет foo:
shopt -s extglob
echo !(*foo*)
Найти:
Вы также можете использовать find (я думаю, это самый надежный вариант) и использовать! чтобы отменить совпадение, а затем запустите команду с xargs -0
:
find . ! -iname 'foo' -print0 | xargs -0 echo
Просто:
Просто перенесите папку в другое место, сделайте то, что вам нужно, и верните ее :-)
rsync -arv --exclude = {файлы} {Место назначения}
решение find порождает один процесс chown для каждого файла, что иногда может быть проблемой. Это решение порождает только один процесс Perl:
find . | perl -nle "chown($(id -u user), $(id -g group), \$_) unless m/foo/"