web-dev-qa-db-fra.com

Rechercher et exécuter dans le dossier trouvé

J'essaie de trouver des fichiers contenant * .nef et de les déplacer dans un sous-répertoire nommé NEF du dossier dans lequel se trouve le fichier.

J'ai commencé à tester avec la commande suivante, mais celle-ci est toujours copiée dans mon répertoire actuel, qui est mon dossier personnel.

find testfolder/*.nef -exec mv NEF \;

Dans la section man find, j'ai lu comment utiliser -execdir, mais utiliser ceci au lieu de -exec a toujours le même résultat.

La question est donc la suivante: comment puis-je assumer de manière dynamique le répertoire actuellement trouvé et les fichiers mv trouvés dans un dossier de sous-répertoire nommé NEF? (qui n'existe pas encore)

Merci d'avance!

3
fairlynuts

Vous avez eu raison de considérer -execdir. Quelque chose de simple comme ci-dessous devrait fonctionner

find testfolder/ -name '*.nef' -execdir mkdir -p NEF \; -execdir mv {} NEF/ \; 
4
BroSlow

Essayer:

find  testfolder/ -iname "*.nef" -exec bash -c 'mkdir $(dirname "{}")/NEF ; mv "{}" $(dirname "{}")/NEF/' \;

dirname utilisé pour extraire le chemin du résultat puis l'utiliser pour créer un nouveau sous-répertoire avant de déplacer le fichier.

2
user.dz