web-dev-qa-db-fra.com

Comment renommer un fichier en utilisant la commande find

J'essaie de renommer un fichier à l'aide de la commande find.

J'essaie de renommer le fichier-a en fichier-10.

Pour ce faire, j'ai d'abord essayé sous la commande:

sps@sps-Inspiron-N5110:~$ find ~ -type f -name test-a -exec mv test-10 '{}' ';'
mv: cannot stat `test-10': No such file or directory
sps@sps-Inspiron-N5110:~$

Puis j'ai essayé ci-dessous:

sps@sps-Inspiron-N5110:~$ find ~ -type f -name test-a -exec mv test-a test-10 '{}' ';'
mv: target `/home/sps/test-a' is not a directory
sps@sps-Inspiron-N5110:~$

Maintenant je ne peux pas penser comment faire cela avec find. J'essaie de faire ceci avec find, parce que j'aurai plusieurs répertoires avec le même nom de fichier et je veux changer tous les test-a en test-10 en une seule commande. Quelqu'un s'il vous plaît suggérer.

Merci.

3
sps

La syntaxe de mv est mv <source> <target>, de sorte que la dernière commande exécutée par find devrait ressembler à ceci:

mv test-a test-10 

Donc, la première hypothèse serait d'essayer:

find ~ -type f -name test-a -exec mv {} test-10 \;

Cependant, cela échouera, car {} sera étendu au chemin complet et mv sera toujours exécuté dans le répertoire actuel, ce qui entraînera le déplacement de tous les fichiers dans votre répertoire actuel et leur remplacement. Pour éviter cela, vous pouvez utiliser -execdir afin que mv soit exécuté dans le répertoire où le fichier a été trouvé:

find ~ -type f -name test-a -execdir mv {} test-10 \;

Ou, puisque le nom du fichier est toujours le même:

find ~ -type f -name test-a -execdir mv test-a test-10 \;
8
muru