
Minha árvore de diretórios é semelhante a esta -
/media/blueray/Data/Test$ tree
.
├── What????
│ └── What????
└── What????.txt
Quando executo o comandofind . -depth | rename 's/[?<>\\:*|\"]//g'
Diz -
Can't rename ./What????/What???? ./What/What: No such file or directory
No entanto, após executar o comando, a estrutura de diretórios torna-se -
/media/blueray/Data/Test$ tree
.
├── What
│ └── What????
└── What.txt
Parece-me que find
está começando a procurar do topo da árvore, então está perdendo o controle da árvore.
Qual é a solução aqui?
Responder1
O problema não é causado por find
, é causado por rename
: ele está processando o caminho completo, então tenta renomear ./What????/What????
para ./What/What
, o que falha porque o What
diretório não existe (ainda).
Processar rename
apenas nomes de arquivos, com -d
, corrigirá isso:
find . -depth | rename -d 's/[?<>\\:*|\"]//g'
Se a sua versão do rename
não suporta a -d
opção (introduzida na versão 1.10 do File::Rename
, assumindo que a sua rename
é a versão Perl), você pode find
passar os nomes dos arquivos apenas executando rename
dentro de cada diretório:
find . -depth -execdir rename 's/[?<>\\:*|\"]//g' {} +