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

Вы можете попробовать этот sed

sed -E '
 h
  s/(.*: (\[[^\]*\] )*)//
  s/(( *[^ ]*){6})(.*)/\1/
  s/( *[^ ]* )([^ ]*)/[\2] /g
 x
  s/([^ ]* )([^ ]*).*/ [\2]/
 G
  y/\n/ /
' infile
2
23.11.2019, 14:01
1 ответ

Проблема вызвана не find, а тем, чтоrename:обрабатывает полный путь, поэтому пытается переименовать ./What????/What????в ./What/What, что не удается, поскольку каталог Whatне существует (еще ).

Получение renameдля обработки только имен файлов с помощью -dисправит это:

find. -depth | rename -d 's/[?<>\\:*|\"]//g'

Если ваша версия renameне поддерживает параметр -d(, представленный в версии 1.10 File::Rename, при условии, что renameявляется версией Perl ),вы можете заставить findпередавать имена файлов, только запустив renameвнутри каждого каталога:

find. -depth -execdir rename 's/[?<>\\:*|\"]//g' {} +

(Спасибо Фредди за решение .)

6
27.01.2020, 21:53

Теги

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