No cambiar el nombre del directorio secundario cuando se cambia el nombre del directorio principal

No cambiar el nombre del directorio secundario cuando se cambia el nombre del directorio principal

Mi árbol de directorios es como el siguiente:

/media/blueray/Data/Test$ tree
.
├── What????
│   └── What????
└── What????.txt

Cuando ejecuto el comandofind . -depth | rename 's/[?<>\\:*|\"]//g'

Dice -

Can't rename ./What????/What???? ./What/What: No such file or directory

Sin embargo, después de ejecutar el comando, la estructura del directorio se convierte en:

/media/blueray/Data/Test$ tree
.
├── What
│   └── What????
└── What.txt

Me parece que findestá empezando a buscar desde lo alto del árbol, por lo que está perdiendo el rastro del árbol.

¿Cuál es la solución aquí?

Respuesta1

El problema no es causado por find, sino por rename: está procesando la ruta completa, por lo que intenta cambiar el nombre ./What????/What????a ./What/What, lo cual falla porque el Whatdirectorio no existe (todavía).

Llegar renamea procesar nombres de archivos únicamente, con -d, solucionará este problema:

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

Si su versión de renameno admite la -dopción (introducida con la versión 1.10 de File::Rename, suponiendo que renamesea la versión de Perl), puede findpasar los nombres de archivos solo ejecutando renamedentro de cada directorio:

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

(Gracias aFreddyparala solución.)

información relacionada