Aplica o comando aos arquivos cujos nomes correspondem a uma expressão regular

3

Por exemplo, eu quero aplicar chmod 777 a todos os arquivos em algum diretório cujo nome corresponda a alguma expressão regular. Claro que posso fazer coisas como chmod 777 f* , mas quando se trata de algo mais complicado, não sei como fazer isso. Por exemplo, não posso executar chmod 777 *a{3,5} .

Como isso pode ser feito?

    
por Sergey 01.10.2011 / 15:13

1 resposta

6

Você pode usar find de -regex para encontrar arquivos correspondentes a uma expressão regular e usar xargs to chmod dos arquivos correspondentes.

$ ls -l
total 320
-rw-r--r-- 1 user user 0 2011-10-01 09:38 baaaaaaat
-rw-r--r-- 1 user user 0 2011-10-01 09:38 baaat
-rw-r--r-- 1 user user 0 2011-10-01 09:38 baat
-rw-r--r-- 1 user user 0 2011-10-01 09:38 bat
-rw-r--r-- 1 user user 0 2011-10-01 09:38 boo
$ find ./  -regextype posix-egrep -regex '.*a{3,5}.*' -print0 | xargs -0 chmod 0777
$ ls -l
total 320
-rwxrwxrwx 1 user user 0 2011-10-01 09:38 baaaaaaat
-rwxrwxrwx 1 user user 0 2011-10-01 09:38 baaat
-rw-r--r-- 1 user user 0 2011-10-01 09:38 baat
-rw-r--r-- 1 user user 0 2011-10-01 09:38 bat
-rw-r--r-- 1 user user 0 2011-10-01 09:38 boo
$ 
    
por 01.10.2011 / 15:50