Percorrer todas as pastas cujos nomes contenham um determinado padrão [duplicado]

0

Vamos supor que eu tenha pastas com os nomes af32, af42, af e desejo imprimir a última data de modificação de todas as pastas que tenham um padrão af *, por exemplo. Eu escrevi shell que terá pasta ou arquivos como parâmetro e retornar data de modificação para essa pasta.

stat -c %y "$1"

este código retornará a data da última modificação para a pasta. mas como posso aplicar este código a mais de uma pasta que tenha o mesmo padrão em seu nome

    
por Muh 06.06.2018 / 15:51

2 respostas

1

Você pode usar find para pesquisar recursivamente em search_folder/ para diretórios ( -type d ) correspondentes a um padrão glob específico (por exemplo, -name 'af*' ):

find search_folder/ -type d -name 'af*' -exec stat -c '%y %n' '{}' \;

Isso executará ( -exec ... \; ) o comando stat -c '%y %n' '{}' em cada um dos resultados da pesquisa, substituindo {} pelo caminho do resultado, começando com o dado search_folder/ .

Observe que eu modifiquei sua saída stat para incluir o nome do arquivo / caminho %n no resultado, porque senão você não veria a qual arquivo pertence cada data de modificação.

    
por Byte Commander 06.06.2018 / 15:59
1

Você pode usar o shell globbing da seguinte forma:

stat -c %y af*/

af*/ corresponde a todos os diretórios no diretório atual, começando com “af”.
Se isso gerar um erro como

bash: /usr/bin/stat: Argument list too long

use esta abordagem printf :

printf '%s
$ ls
af  af32  af42  bf  cg45
$ stat -c %y af*/
2018-06-05 18:59:55.355277977 +0200
2018-06-04 19:01:28.968869600 +0200
2018-06-06 18:58:15.968639269 +0200
$ stat -c '%y %n' af*/
2018-06-05 18:59:55.355277977 +0200 af/
2018-06-04 19:01:28.968869600 +0200 af32/
2018-06-06 18:58:15.968639269 +0200 af42/
' af*/ | xargs -0 stat -c %y

Exemplo de execução

Você pode querer adicionar %n a stat de saída…

stat -c %y af*/
    
por dessert 06.06.2018 / 19:06