UNIX: переименовать файлы, переданные по команде find - PullRequest
0 голосов
/ 12 мая 2011

Я хочу добавить строку ко всем файлам в заблокированном каталоге.У меня проблемы с передачей имен файлов в команду mv:

find . -flags uchg -exec chflags nouchg "{}" | mv "{}" "{}"_LOCK \;

Приведенный выше код явно не работает, но я думаю, что он объясняет, что я пытаюсь сделать.

IУ меня две проблемы:

  1. Добавление строки в конец имени файла, но перед расширением (001_LOCK.jpg).
  2. Передача выходных данных команды find дважды,Мне нужно сделать это, потому что это не позволит мне изменить имена файлов, пока они заблокированы.Поэтому мне нужно разблокировать файл и затем переименовать его.

У кого-нибудь есть идеи?

1 Ответ

1 голос
/ 12 мая 2011

Это должно быть хорошим началом.

Я предполагаю, что вы не передаете chflags в mv, что не имеет смысла, а просто переименовываете файл, если chflags не удается. Обработка расширения более сложна, но, безусловно, выполнима.

find . -flags uchg -exec sh -c "chflags nouchg \$0 || mv \$0 \$0_LOCK" {} \;

Редактировать: переименовать, если chflags успешно :

find . -flags uchg -exec sh -c "chflags nouchg \$0 && mv \$0 \$0_LOCK" {} \;
...