Você pode alterar a permissão para todos os arquivos, exceto um diretório no Linux?

6

Existe alguma maneira de alterar a permissão de todos os arquivos / diretórios, exceto um único diretório em um único comando de linha de comando do Linux?

    
por Rana 17.09.2012 / 20:00

6 respostas

4

Supondo que você deseja definir o bit de permissão 755 recursivamente para o conteúdo das pastas em seu diretório de trabalho atual, além do conteúdo da pasta chamada "nameOfFolderToBeExcluded" :

 chmod 755 -R $(ls | awk '{if($1 != "nameOfFolderToBeExcluded"){ print $1 }}')
    
por 17.09.2012 / 20:16
4

Você pode usar find para procurar todos os arquivos que não correspondem ao nome do arquivo fornecido e exec a em todos os arquivos encontrados como:

Supondo que você precisa excluir o diretório test e dar permissões de arquivo 755 para todos os outros arquivos e diretórios. Isso seria executado no topo da árvore.

find ! -name test -exec chmod 755 {} \;

Testado

mtk@mtk4-laptop:$ touch a1.txt a2.txt a3.txt test
mtk@mtk4-laptop:$ ls -lrt
total 0
-rw-rw-r-- 1 mtk mtk 0 Sep 17 23:55 test
-rw-rw-r-- 1 mtk mtk 0 Sep 17 23:55 a3.txt
-rw-rw-r-- 1 mtk mtk 0 Sep 17 23:55 a2.txt
-rw-rw-r-- 1 mtk mtk 0 Sep 17 23:55 a1.txt
mtk@mtk4-laptop:$ find ! -name test -exec chmod 777 {} \;
mtk@mtk4-laptop:$ ls -lrt
total 0
-rw-rw-r-- 1 mtk mtk 0 Sep 17 23:55 test
-rwxrwxrwx 1 mtk mtk 0 Sep 17 23:55 a3.txt*
-rwxrwxrwx 1 mtk mtk 0 Sep 17 23:55 a2.txt*
-rwxrwxrwx 1 mtk mtk 0 Sep 17 23:55 a1.txt*
mtk@mtk4-laptop:$ 

As permissões de arquivo para o arquivo test permaneceram inalteradas. O mesmo é aplicável para diretórios.

    
por 17.09.2012 / 20:23
2

Qual shell?

Se você está executando bash (provavelmente se você estiver no Linux), você pode conferir extglob , que oferece mais opções para globbing, incluindo o "glob negativo" !()

shopt -s extglob
chmod 774 !(file-to-ignore)
    
por 17.09.2012 / 22:11
1

Usando find mais simplesmente assim:

find <from_where_to_change> -not -path "*/<excluded_dir_name>*" [-and -not -path "*/<another_excluded_dir_if_you_want>*"] -exec chown <user>[:<group>] {} \;

No meu caso, foi:

find /data/project -not -path "*/.svn*" -exec chown :www-data {} \;

Desta forma eu mudei o grupo na pasta / dados / projeto recursivamente, exceto todas as pastas ".svn" de forma recursiva.

    
por 24.07.2014 / 12:33
0

Ainda mais fácil com comandos básicos:

chmod 755 -R $(ls -A|grep -v 'directory_name_to_exclude/*')
    
por 25.08.2016 / 15:43
0

Estou usando o comando abaixo, ele fornecerá os arquivos 644 e o diretório 755 para todos os arquivos e diretórios no diretório de trabalho Present, mas excluirá o diretório var para fornecer permissão.

find . -not -path "*/var*" -type f -exec chmod -c 0644 {} \; && find . -not -path "*/var*" -type d -exec chmod -c 0775 {} \;
    
por 01.06.2018 / 08:29