Может ли команда «переименовать» различать каталоги и файлы? [дубликат]

На этот вопрос уже есть ответ здесь:

Мне нужно переименовать только каталоги, а не файлы, и я хочу сделать это с помощью переименовать .

Есть ли способ сделать это?

В руководстве ничего не говорится о различии между каталогами и файлами.

Эта команда меняет все, независимо от каталога или файлов:

rename 's/ /\n/g' *

Эта команда решила мою проблему:

rename 's/ /\n/g' */

Мне нужна косая черта позади нее.

2
задан 15 January 2019 в 17:46

1 ответ

rename не различает файлы и папки.


Оболочка ответственна за расширение подстановочного знака * в файлы и папки.

  • * будет расширен до всех нескрытых файлов и папок.
  • */ будет расширен до всех нескрытых папок.

Но я не знаю ни о каком способе расшириться до файлов только. Можно использовать find -exec вместо этого.

только папки:

rename 's/ /\n/g' */

или

find . -maxdepth 1 -type d -exec rename 's/ /\n/g' {} +

Только файлы:

find . -maxdepth 1 -type f -exec rename 's/ /\n/g' {} +

Отметьте это find также найдет спрятанные файлы, в отличие от этого, * (если Вы не включаете dotglob опция оболочки путем выполнения shopt -s dotglob).


zsh кажется, может соответствовать файлам только подстановочным знакам.


Отказ от ответственности: Я не рекомендовал бы добавить новые строки к именам файлов, поскольку это может доставить неприятности и повредить много сценариев.

3
ответ дан 2 December 2019 в 02:41

Другие вопросы по тегам:

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