Comment obtenir le chemin d'accès complet d'un fichier?
Est-il un moyen facile je peux imprimer le chemin d'accès complet de file.txt
?
file.txt = /nfs/an/disks/jj/home/dir/file.txt
La <command>
dir> <command> file.txt
doit imprimer
/nfs/an/disks/jj/home/dir/file.txt
- Qu'en est ou myfile ./myfile
Vous devez vous connecter pour publier un commentaire.
Utilisation readlink:
readlink
).-f
est pour le chemin d'accès complet. Fonctionne bien sous Linux, et le demandeur a été l'utilisation de linux... donc pourquoi c'est la bonne réponse.brew install coreutils
puisgreadlink -f file.txt
readlink
: Noterealpath
est le préféré de commande à utiliser pour la mise en forme canonique de la fonctionnalité.Je suppose que vous êtes en utilisant Linux.
J'ai trouvé un utilitaire appelé
realpath
dans coreutils 8.15.Comme par @polystyrène-mouche et @arche-standton commentaires,
realpath
seul à ne pas vérifier les fichiers existence, pour résoudre cela, ajoutez lee
argument:realpath -e file
realpath
a été commis à la coreutils pensions de fin de 2011, la libération de 8h15 a été fait en janvier 2012, j'ai répondu à la question (avec lereadlink
suggestion) en Mars 2011 🙂La suite fait habituellement le tour:
LOCAL_VARIABLE="filename.txt" && echo $(cd $(dirname "$LOCAL_VARIABLE") && pwd -P)/$(basename "$LOCAL_VARIABLE")
readlink
ne fonctionne pas si le fichier est un lien symbolique, il va vous montrer la cible du lien symbolique plutôt que le lien symbolique lui-même.readlink
me ramène à la mère dir où le lien symbolique génère à partir de, mais l'ignore.set .. && echo $(cd $(dirname "$1") && pwd -P)/$(basename "$1")
### Sortie: /home/ravi/..Je savoir il y a un moyen plus simple que cela, mais damné si je peux le trouver...
ou
find `pwd` -type file -name \*.dmp
Si vous êtes dans le même répertoire que le fichier:
Remplacer
file.txt
avec votre nom de fichier cible.echo $(pwd)/file.txt
Dans windows, vous pouvez :-
Maintenez la touche maj enfoncée et faites un clic droit sur un fichier qui vous donne peut-option appelée
"Copy as Path"
Cela va copier le chemin complet du fichier dans le presse-papiers.
Sous Linux, vous pouvez utiliser la commande :-
realpath yourfile
pour obtenir le chemin complet d'un fichier comme suggéré par de nombreux.Je sais que c'est une vieille question maintenant, mais juste pour ajouter de l'information ici:
La commande Linux
which
peut être utilisé pour trouver le chemin d'un fichier de commande, c'est à direIl y a quelques mises en garde à cela; s'il vous plaît voir https://www.cyberciti.biz/faq/how-do-i-find-the-path-to-a-command-file/.
Vous pouvez utiliser le rpf (nom de chemin complet) script:
fpn
n'est pas un standard package Linux, mais c'est gratuite et ouverte github du projet et vous pourrait-il mis en place dans une minute.pwd
par lui-même doit s'exécuter correctement sur Linux et la plupart des autres systèmes Unix environnements.Fonctionne sur Mac, Linux, *nix:
Cela vous donnera une cité csv de tous les fichiers dans le répertoire courant:
La sortie de ce qui peut être facilement copié dans une liste python, ou de toute autre structure de données.
Dans un scénario similaire, je lance un cshell script à partir d'un autre emplacement. Pour le choix d'un chemin d'accès absolu du script pour qu'il fonctionne dans le répertoire désigné seulement, je suis en utilisant le code suivant:
$0
magasins de la chaîne exacte la façon dont le script a été exécuté.Par exemple, si le script a été lancé comme ceci:
$> ../../test/test.csh
,$script_dir
contiendra/home/abc/sandbox/v1/../../test
./test.csh
vous aurez un chemin se terminant avec/test/.
Pour Mac OS X, j'ai remplacé les utilitaires livrés avec le système d'exploitation, et de les remplacer par une version plus récente de coreutils. Cela vous permet d'accéder à des outils comme
readlink -f
(pour le chemin absolu des fichiers) etrealpath
(chemin absolu vers les répertoires) sur votre Mac.La version Homebrew ajoute un " G " (pour les Outils GNU) devant le nom de la commande -- donc les équivalents de devenir
greadlink -f FILE
etgrealpath DIRECTORY
.Instructions pour savoir comment installer le coreutils/GNU Tools sur Mac OS X via Homebrew peut être trouvé dans cette StackExchange arcticle.
NB: Le
readlink -f
etrealpath
commandes doivent travailler à l'extérieur de la boîte pour les non-Mac les utilisateurs d'Unix.brew install coreutils
C'est l'explication de ce qui se passe à @ZeRemz de réponse:
"$1"
dirname "$1"
cd "$(dirname "$1")
dans cette relative dir&& pwd -P
et obtenir un chemin absolu pour elle.-P
option permettra d'éviter tous les liens symboliques$(basename "$1")
echo
ilVous pouvez utiliser cette fonction. Si le nom de fichier est donné sans chemin d'accès relatif, alors il est supposé être présent dans le répertoire de travail courant:
Utilisation:
Utilisation avec chemin relatif:
Avec les espaces dans les nom de fichier:
Cela a fonctionné assez bien pour moi. Il ne repose pas sur le système de fichiers (pro/con selon le besoin) donc ça va être rapide; et, il doit être portable à la plupart des *NIX. Il suppose la chaîne est en effet par rapport à la DDT et pas un autre répertoire.
C'est naïf, mais j'ai dû le faire pour être conforme à POSIX. Nécessite l'autorisation d'un cd dans le répertoire du fichier.
Vous pouvez enregistrer dans votre "coquille.rc" ou tout simplement le mettre dans la console
exemple:
sortie
ap ../foobar.txt
donnera/home/user/../foobar.txt
, ce qui n'est généralement pas ce que vous voulez.ap /tmp/foobar.txt
donnera/home/user//tmp/foobar.txt
, ce qui est faux.Trouverez tous les liens au fichier avec le même numéro d'inœud comme file.txt
l'ajout d'un
-xdev
drapeau éviterfind
de la croix-dispositif de limites ("points de montage"). (Mais ce sera probablement la cause de rien pour être trouvé si l'find
ne démarre pas à un répertoire sur le même appareil quefile.txt
)Ne remarque que
find
peut signaler plusieurs chemins pour un même système de fichiers de l'objet, car un Inode peut être lié par plus d'une entrée de répertoire, peut-être même en utilisant des noms différents. Par exemple:Sera de sortie:
Cela fonctionne pour les deux fichier et dossier:
Généralement:
Sinon, juste pour le dossier en cours:
J'aime beaucoup de réponses déjà données, mais j'ai trouvé cet article très utile, surtout au sein d'un script pour obtenir le chemin complet d'un fichier, y compris les liens symboliques et les références relatives telles que
.
et..
Qui sera de retour le chemin d'accès complet de la
file
à partir du chemin de la racine à partir.Ceci peut être utilisé dans un script afin que le script ne sait quel chemin il est en cours d'exécution, ce qui est utile dans un référentiel clone qui pourrait être situé n'importe où sur une machine.
Je peux alors utiliser la
${basePath}
variable dans mes scripts pour faire directement référence à d'autres scripts.Espère que cette aide,
Dave
Cela fonctionne avec Linux et Mac OSX ..
Un autre Linux utilitaire, qui fait ce travail:
Pour Mac OS, si vous voulez juste pour obtenir le chemin d'un fichier dans le finder, cliquez sur le fichier, puis "Services" dans le bas. Vous obtenez beaucoup de choix, y compris le "chemin de la copie" et "copier le chemin d'accès complet". En cliquant sur l'un de ces met le chemin d'accès dans le presse-papiers.
Dans mac mentionné en dessous de la ligne des œuvres. Pas nécessaire d'ajouter des lignes de fantaisie.
print working directory
Copie le texte dans le presse-papiers et affiche le texte sur la fenêtre du terminal.
🙂
(J'ai copié une partie du code à partir d'un autre débordement de pile de réponse, mais ne peut pas trouver la réponse plus)
la façon la plus simple que j'ai trouvé est
il fonctionne bien pour moi
Dans Mac OS x, procédez comme suit:
cd
dans le répertoire du fichier cible.Terminal
file.txt
avec votre nom réel du fichier.À côté de "readlink -f" , couramment utilisé la commande:
Ce aussi donner le chemin d'accès complet et le nom du fichier à console
Hors-sujet: Cette méthode donne juste relative les liens, pas absolue. Le
readlink -f
de commande est la bonne.Créer une fonction comme ci-dessous (les échos, le chemin absolu d'un fichier pwd et ajoute le fichier à la fin de la trajectoire:
Maintenant vous pouvez juste trouver n'importe quel fichier chemin d'accès:
Pour obtenir chemin d'accès complet d'un fichier :
1) ouvrez votre terminal dans le dossier contenant votre fichier, en appuyant sur le clavier touches suivantes:
CTRL + ALT + T
2) tapez "pwd" (acronyme de Print nom de Working Directory):
c'est tout!
Cela vous donne le chemin absolu du fichier: