Какова историческая причина использования фигурных скобок {} в качестве заполнителя в find -exec

Проблема в том, что вы используете полный путь, который включает каталог. Самый простой обходной путь — сначала cdвойти в целевой каталог, а затем запустить цикл for:

.

cd /var/lib/jenkins/bin
for file in *; do echo mv "$file" "$(echo "$file" | cut -c4-)"; done

Или, используя собственные возможности оболочки по работе со строками :

cd /var/lib/jenkins/bin
for file in *; do echo mv "$file" "${file#????}"; done

В качестве альтернативы, если у вас есть perl -rename (с именем renameв системах на базе Debian -, perl-renameв других ), вы можете:

rename -n 's|.*/...||' /var/lib/jenkins/bin/*

Убедившись, что это работает, удалите -n, чтобы действительно переименовать.


Однако, как указал Сандип в комментариях, если вы хотите удалить только 01-, удалите именно это:

rename -n 's|.*/01-||' /var/lib/jenkins/bin/*

2
29.08.2019, 17:38
1 ответ

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

man find, однако не имеет упоминания о причине.

-1
16.08.2020, 06:41

Теги

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