Obtenez le chemin absolu des fichiers en utilisant la commande 'find'


26

Existe-t-il un moyen d'obtenir le chemin absolu d'un fichier recherché?

Par exemple:

find .. -name "filename"

Cela me donne des résultats comme ../filenamemais je veux le chemin complet.

Ce dont j'ai besoin, c'est de trouver dans le répertoire parent et ses enfants, pour un fichier spécifique, que j'utiliserai plus tard dans un autre script.

Merci


Réponses:


15

Essayez quelque chose comme:

find "$(cd ..; pwd)" -name "filename"

Merci, je testais juste $(cd ..; pwd). Ici, cela fonctionne bien, mais si je le fais seul dans un terminal, je ne peux pas obtenir le répertoire parent ... Je reçois "Bash: <rép>: est un répertoire. Et si je le fais, $(cd ..; echo "something")je reçois" quelque chose: pas un command "
JorgeeFG

Voulez-vous dire comme une commande distincte? Ensuite, vous devez supprimer le signe dollar:(cd ..; pwd)
Scrutinizer

Merci, c'était tout. Toute référence expliquant pourquoi devrais-je supprimer le $, comment cela affecte-t-il le sous-shell?
JorgeeFG

1
Oui ( ... )signifie exécuter dans un sous-shell, la sortie est écrite dans stdout. $( ... )signifie "substitution de commande". Ce dernier peut être utilisé comme s'il s'agissait d'une expansion variable.
Scrutinizer

find / -name "filename"
Panther

12

Essayez d'utiliser l' -execoption de find:

find .. -name "filename" -exec readlink -f {} \;

Remarque: readlinkimprime la valeur d'un lien symbolique ou d'un nom de fichier canonique.


cela appellera readlink sur chaque fichier, ce sera donc très inefficace.
bac0n

9

Vous pouvez utiliser bashl'extension Tilde de pour obtenir le chemin absolu du répertoire de travail en cours, de cette façon, findimprime également le chemin absolu pour les résultats:

find ~+ -type f -name "filename"

S'il est exécuté en ~/Desktop, il est étendu à

find /home/yourusername/Desktop -type f -name "filename"

et imprime des résultats comme:

/home/yourusername/Desktop/filename

Si vous souhaitez utiliser cette approche avec le répertoire parent du répertoire de travail actuel, vous devez le faire cdavant d'appeler find:

cd .. && find ~+ -type f -name "filename"


1

L'utilisation de PWD peut également vous montrer le répertoire complet. Pwd vous montrera tous vos répertoires dans lesquels vous vous trouvez, comme l'extension du nom de fichier. J'espère que cela vous a aidé.


1

Cela a fonctionné pour moi, mais ne retournera que la première occurrence.

realpath $(find . -type f -name filename -print -quit)

Pour obtenir des chemins complets pour toutes les occurrences (comme suggéré par Sergiy Kolodyazhnyy)

find . -type f -name filename | xargs realpath

Commentaire précédent supprimé, +1, bon travail @Wyrmwood
Sergiy Kolodyazhnyy

1

Suppression du dernier composant de répertoire avec le paramètre Expansion .

find "${PWD%/*}" -name 'filename'

Un exemple de la façon dont vous pouvez utiliser mapfile pour enregistrer la sortie de find dans un tableau indexé pour une utilisation ultérieure.

mapfile -t -d '' < <(find ${PWD%/*} -name 'filename' -print0)

(si aucun nom de tableau n'est spécifié, MAPFILE sera le nom de tableau par défaut).

for i in "${MAPFILE[@]}"; do
    echo "$((n++)) $i"
done
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.