Как исключить папку при выполнении файловых операций, например, cp, mv, rm, chown и т. Д. В Linux - PullRequest
11 голосов
/ 14 января 2010

Как исключить папку при выполнении операций с файлами, например, cp и т. Д.

В настоящее время я бы использовал подстановочный знак *, чтобы применить файловую операцию ко всем, но мне нужно исключить одну папку.

Команда, которую я на самом деле хочу использовать: chown, чтобы изменить владельца всех файлов в каталоге, но мне нужно исключить один подкаталог.

Ответы [ 6 ]

18 голосов
/ 14 января 2010

Если вы используете bash и включаете extglob через shopt -s extglob, тогда вы можете использовать !(<pattern>), чтобы исключить данный шаблон.

8 голосов
/ 14 января 2010
find dir_to_start -name dir_to_exclude -prune -o -print0 | xargs -0 chown owner

find dir_to_start -not -name "file_to_exclude"  -print0 | xargs -0 chown owner
5 голосов
/ 14 января 2010
for file in *; do
  if [ $file != "file_I_dont_want_to_chown" ]
    then
      chown -R Camsoft $file
  fi
done 
4 голосов
/ 14 января 2010

Объедините несколько маленьких острых инструментов Unix: Исключить папку "foo"

% ls -d * | grep -v foo | xargs -d "\n" chown -R Camsoft
1 голос
/ 14 января 2010

Для этой ситуации я бы рекомендовал использовать find. Вы можете указать пути для исключения, используя -not -i whilename 'PATH'. Затем с помощью exec вы выполняете команду, которую хотите выполнить

find . -not -iwholename './var/foo*' -exec chown www-data '{}' \;

Хотя это, вероятно, помогает в вашей ситуации, я также видел сценарии, устанавливающие флаг неизменности. Убедитесь, что вы убрали флажок, когда закончите, вы должны использовать ловушку для этого на случай, если скрипт будет убит досрочно (примечание: запускается из скрипта, код ловушки запускается при выходе из сеанса bash). В моем варианте много проблем, но в некоторых ситуациях это хорошо.

cd /var
trap 'chattr -R -i foo > /dev/null 2>&1' 0
chattr -R +i foo
chown -R www-data *
0 голосов
/ 14 января 2010

Другим вариантом может быть временное удаление разрешения для этого файла /folder.
В Unix вам нужно разрешение 'x' для каталога, чтобы войти в него.

edit: очевидно, это не годится для работы, если вы создаете резервную копию действующей производственной базы данных - но для исключения вашей коллекции «интересных изображений» при копировании документов на USB-накопитель это возможно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...