Добавление (через переименование?) `.Bad` к файлам, идентифицированным` tests / test _. * `

0

Чего я хочу?

Учитывая следующую структуру каталогов:

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

Я хотел бы перейти к следующему:

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

Итак, я хочу добавить .badко всем файлам, начиная с test_которых находятся в testsкаталоге.

Что я пробовал?

Из советов, приведенных в этой теме , я попробовал следующее:

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

Но .*в newчасти шаблона замещения s/old/new, по-видимому, автоматически выполняется экранирование. Как я могу позволить второй .*интерпретировать как регулярное выражение?

Кроме того, использование test_.*\.bad$дает мне следующее:

Final $ should be \$ or $name at (eval 1) line 1, within string 
Bentley4
источник

Ответы:

1

Find отлично подходит для таких вещей (обратите внимание, что это может работать, только если у ваших путей нет пробелов).

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

Find может фильтровать по дереву каталогов, чтобы найти то, что вы хотите, а затем аргумент exec для поиска позволяет подставить все, что было найдено, в "{}".

fquinner
источник
Для моего случая использования мне действительно нужно было указать, чтобы искать только в каталогах, называемых testsкак указано. так что вместо -name "test_*"я использовал -path "*tests/test_*.
Bentley4