Вы можете попробовать этот sed
sed -E '
h
s/(.*: (\[[^\]*\] )*)//
s/(( *[^ ]*){6})(.*)/\1/
s/( *[^ ]* )([^ ]*)/[\2] /g
x
s/([^ ]* )([^ ]*).*/ [\2]/
G
y/\n/ /
' infile
Проблема вызвана не 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' {} +