Применить расширение параметра bash к find {}? - PullRequest
0 голосов
/ 28 августа 2018

Допустим, я хочу заменить все пробелы в именах файлов подчеркиванием. Прямо сейчас я бы сделал это:

find . -type f -name "* *" -execdir bash -c 'mv "${1}" "${1// /_}"' -- {} \;

Обратите внимание на довольно громоздкую конструкцию bash -c для "поднятия" совпадения имени файла find ({}) с переменной bash, с которой я могу работать над расширением параметра.

Есть ли способ применить расширение параметров bash (как показано в примере) непосредственно к *1000* {}, не проходя через явную подоболочку bash (возможно, сделав оператор немного короче / понятнее)?

1 Ответ

0 голосов
/ 28 августа 2018

Не настолько, насколько я знаю; find всегда расширяется {} буквально. Однако вы можете сократить код, если у вас есть rename.

Но будьте осторожны, есть две общие программы, называемые rename. Первый (написанный на C, часть util-linux) будет использоваться так:

find . -type f -name '* *' -execdir rename ' ' '_' {} +

Поразительно, что util-linux rename заменяет только первое вхождение строки поиска, но не все из них.

Второй rename (написанный на Perl, иногда устанавливаемый как prename) будет использоваться следующим образом:

find . -type f -name '* *' -execdir rename 's/ /_/g' {} +
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...