Acrescentar (via renomear?) '.bad' a arquivos identificados por 'tests / test _. *'

0

O que eu quero?

Dada a seguinte estrutura de diretórios:

.
├── bar.py
├── hap
│   ├── bla.py
│   └── tests
│       └── test_hap.py
└── hip
    ├── testimony.py
    └── tests
        ├── foo.py
        └── test_hip.py

Eu gostaria de ver o seguinte:

.
├── bar.py
├── hap
│   ├── bla.py
│   └── tests
│       └── test_hap.py.bad
└── hip
    ├── testimony.py
    └── tests
        ├── foo.py
        └── test_hip.py.bad

Então, eu quero acrescentar .bad a todos os arquivos que começam com test_ , que estão localizados em um diretório tests .

O que eu tentei?

Nas dicas fornecidas em este tópico , tentei o seguinte:

shopt -s globstar
rename "s/tests\/test_.*/tests\/test_.*\.bad/" **

Mas o .* na parte new do padrão de substituição s/old/new parece ter escapado automaticamente. Como posso deixar o segundo .* ser interpretado como uma expressão regular?

Além disso, usar test_.*\.bad$ me dá o seguinte:

Final $ should be \$ or $name at (eval 1) line 1, within string 
    
por Bentley4 27.02.2015 / 12:38

1 resposta

1

Encontrar é ótimo para coisas como essa (note que isso só funcionará se seus caminhos não tiverem espaços).

find /directory/path -type f -name "test_*" -exec mv {} {}.bad \;

O Find pode filtrar na árvore de diretórios para encontrar o que você quer, então o argumento exec para encontrar permite substituir o que foi encontrado em "{}".

    
por 27.02.2015 / 12:45