7 votes

Comment puis-je diriger la sortie de "find" vers "cd" ?

Que dois-je faire pour rechercher un fichier dans la liste des dossiers et changer le répertoire courant en répertoire du fichier ?

J'ai essayé find -name script.py | cd mais cela n'a pas fonctionné (non pas que je m'y attendais).

Merci de votre aide !

11voto

Fabiano Soriani Points 543

cd ne lit pas depuis stdin, vous ne pouvez donc pas lui transmettre un nom de dossier. Mais vous pouvez utiliser "$(...)" pour utiliser la sortie d'une commande comme un argument pour cd :

cd "$(find -name script.py -type f -printf '%h\n' -quit)"

-printf '%h\n' dit à find pour ne sortir que dans les dossiers qui contiennent les fichiers.

-quit dit à find pour quitter après avoir trouvé le premier fichier correspondant.

5voto

nux Points 34943

Vous pouvez utiliser ce code :

cd "$(dirname "$(find / -type f -name test | head -1)")"

Comme vous pouvez le voir, la recherche se fera à partir du début du répertoire racine avec la commande find / puis, il listera les fichiers réguliers appelés test -. name test et enfin, il se rendra dans son répertoire.

Note : La tuyauterie passant par head -1 filtrera tout sauf le premier.

dirname - supprimer le suffixe de non-répertoire du nom de fichier

cd changer de répertoire

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X