переименовать файлы на основе имени каталога

Выдержка из документации Debiansystemd

Показать состояние службы «пример 1»:

systemctl status example1

Разрешает запуск "example1" при загрузке:

systemctl enable example1

Отключите "example1", чтобы он не запускался во время загрузки:

systemctl disable example1

Пример запуска службы 1

systemctl start example1

1
06.11.2019, 18:14
2 ответа

Одинарные кавычки прекратят расширение. И {}, возможно, потребуется экранировать. Вместо этого сделайте это:

find. -type f -name 'botrytis_cinerea_T12345.*' -exec rename "s/botrytis_cinerea_T12345/$i/g" \{\} \;
0
27.01.2020, 23:40

Существуют две распространенные renameкоманды с разным синтаксисом. Вы используете сценарий, написанный для версии, которая принимает выражение Perl :

.
rename s/expression/replacement/g file...

Но тот, который вы установили, принимает как регулярное выражение, так и строку замены, как следует из сообщения об ошибке, которое вы видели:

rename [options] expression replacement file...

(Считайте себя удачливым или умным, если вы использовали \;вместо +. )Это можно исправить, изменив команду find:

find. -type f -name 'botrytis_cinerea_T12345.*' -exec rename botrytis_cinerea_T12345 "$i" {} \;

Как отметил Кусалананда в комментариях, вы также cdнаходитесь внутри цикла, но никогда не возвращаетесь в исходный каталог, поэтому на каждой итерации после первой вы неоднократно пытаетесь cdперейти в каталог, который не существует. Вы можете попытаться исправить это, выполнив еще один cdпосле find, но я, вероятно, постараюсь избежать этого, отрегулировав сам find:

.
for i in L*; do
    find "$i" -type f -name 'botrytis_cinerea_T12345.*' -exec rename botrytis_cinerea_T12345 "$i" {} \;
done

См. также

1
27.01.2020, 23:40

Теги

Похожие вопросы