Is er een gemakkelijke manier om het volledige pad van file.txt
af te drukken?
file.txt = /nfs/an/disks/jj/home/dir/file.txt
De <command>
dir> <command> file.txt
moet afdrukken
/nfs/an/disks/jj/home/dir/file.txt
Antwoord 1, autoriteit 100%
Gebruik readlink:
readlink -f file.txt
Antwoord 2, autoriteit 21%
Ik neem aan dat je Linux gebruikt.
Ik heb een hulpprogramma gevonden met de naam realpath
in coreutils 8.15.
realpath file.txt
/data/ail_data/transformed_binaries/coreutils/test_folder_realpath/file.txt
Volgens de opmerkingen van @styrofoam-fly en @arch-standton, controleert realpath
alleen niet op het bestaan van bestanden. Om dit op te lossen, voegt u het argument e
toe: realpath -e file
Antwoord 3, autoriteit 6%
Het volgende werkt meestal:
echo "$(cd "$(dirname "$1")" && pwd -P)/$(basename "$1")"
Antwoord 4, autoriteit 3%
Ik weetdat er een eenvoudigere manier is om dit te doen, maar verdorie als ik het kan vinden…
jcomeau@intrepid:~$ python -c 'import os; print(os.path.abspath("cat.wav"))'
/home/jcomeau/cat.wav
jcomeau@intrepid:~$ ls $PWD/cat.wav
/home/jcomeau/cat.wav
Antwoord 5, autoriteit 2%
find $PWD -type f | grep "filename"
of
find $PWD -type f -name "*filename*"
Antwoord 6, autoriteit 2%
Op Windows:
- Als u
Shift
ingedrukt houdt en met de rechtermuisknop op een bestand in Windows Verkenner klikt, krijgt u een optie genaamdCopy as Path
.
Hiermee wordt het volledige pad van het bestand naar het klembord gekopieerd.
Op Linux:
- Je kunt het commando
realpath yourfile
gebruiken om het volledige pad van een bestand te krijgen, zoals voorgesteld door anderen.
Antwoord 7
Als u zich in dezelfde map bevindt als het bestand:
ls "`pwd`/file.txt"
Vervang file.txt
door uw doelbestandsnaam.
Antwoord 8
Je zou het fpn (volledige padnaam)-script kunnen gebruiken:
% pwd
/Users/adamatan/bins/scripts/fpn
% ls
LICENSE README.md fpn.py
% fpn *
/Users/adamatan/bins/scripts/fpn/LICENSE
/Users/adamatan/bins/scripts/fpn/README.md
/Users/adamatan/bins/scripts/fpn/fpn.py
fpn
is geen standaard Linux-pakket, maar het is een gratis en open github-projecten jij zou het in een minuut kunnen instellen.
Antwoord 9
Ik weet dat dit nu een oude vraag is, maar om de informatie hier aan te vullen:
De Linux-opdracht which
kan worden gebruikt om het bestandspad van een opdrachtbestand te vinden, d.w.z.
$ which ls
/bin/ls
Hierbij zijn enkele kanttekeningen te plaatsen; zie https:/ /www.cyberciti.biz/faq/how-do-i-find-the-path-to-a-command-file/.
Antwoord 10
Werkt op Mac, Linux, *nix:
Dit geeft je een csv met aanhalingstekens van alle bestanden in de huidige map:
ls | xargs -I {} echo "$(pwd -P)/{}" | xargs | sed 's/ /","/g'
De uitvoer hiervan kan eenvoudig worden gekopieerd naar een pythonlijst of een vergelijkbare gegevensstructuur.
Antwoord 11
U kunt deze functie gebruiken. Als de bestandsnaam wordt gegeven zonder relatief pad, wordt aangenomen dat deze aanwezig is in de huidige werkdirectory:
abspath() { old=`pwd`;new=$(dirname "$1");if [ "$new" != "." ]; then cd $new; fi;file=`pwd`/$(basename "$1");cd $old;echo $file; }
Gebruik:
$ abspath file.txt
/I/am/in/present/dir/file.txt
Gebruik met relatief pad:
$ abspath ../../some/dir/some-file.txt
/I/am/in/some/dir/some-file.txt
Met spaties in bestandsnaam:
$ abspath "../../some/dir/another file.txt"
/I/am/in/some/dir/another file.txt
Antwoord 12
Je kunt dit opslaan in je shell.rc
of gewoon in console
function absolute_path { echo "$PWD/$1"; }
alias ap="absolute_path"
voorbeeld:
ap somefile.txt
uitvoert
/home/user/somefile.txt
Antwoord 13
In een soortgelijk scenario start ik een cshell-script vanaf een andere locatie. Voor het instellen van het juiste absolute pad van het script zodat het alleen in de aangewezen map wordt uitgevoerd, gebruik ik de volgende code:
set script_dir = `pwd`/`dirname $0`
$0
slaat de exacte tekenreeks op hoe het script werd uitgevoerd.
Voor bijv. als het script als volgt is gestart: $> ../../test/test.csh
,
$script_dir
bevat /home/abc/sandbox/v1/../../test
Antwoord 14
Voor Mac OS X heb ik de hulpprogramma’s die bij het besturingssysteem zijn geleverd vervangen door een nieuwere versie van coreutils. Dit geeft je toegang tot tools zoals readlink -f
(voor absoluut pad naar bestanden) en realpath
(absoluut pad naar mappen) op je Mac.
De Homebrew-versie voegt een ‘G’ (voor GNU Tools) toe voor de opdrachtnaam — dus de equivalenten worden greadlink -f FILE
en grealpath DIRECTORY
.
Instructies voor het installeren van de coreutils/GNU Tools op Mac OS X via Homebrew zijn te vinden in dit StackExchange-artikel.
NB: De commando’s readlink -f
en realpath
zouden standaard moeten werken voor niet-Mac Unix-gebruikers.
Antwoord 15
echo $(cd $(dirname "$1") && pwd -P)/$(basename "$1")
Dit is een uitleg van wat er aan de hand is in het antwoordvan @ZeRemz:
- Dit script krijgt een relatief pad als argument
"$1"
- Dan krijgen we dirnameeen deel van dat pad (je kunt dir of bestand aan dit script doorgeven):
dirname "$1"
- Vervolgens
cd "$(dirname "$1")
in deze relatieve map && pwd -P
en krijg er een absoluut pad voor.-P
optie vermijdt alle symbolische links- Daarna voegen we basenametoe aan het absolute pad:
$(basename "$1")
- Als laatste stap
echo
het
Antwoord 16
Dit werkte best goed voor mij. Het is niet op het bestandssysteem (een pro / con afhankelijk van de behoefte), dus het zal snel zijn; En, het moet draagbaar zijn voor de meeste * NIX. Het neemt aan dat de doorgegeven string inderdaad ten opzichte van de PWD is en niet een andere map.
function abspath () {
echo $1 | awk '\
# Root parent directory refs to the PWD for replacement below
/^\.\.\// { sub("^", "./") } \
# Replace the symbolic PWD refs with the absolute PWD \
/^\.\// { sub("^\.", ENVIRON["PWD"])} \
# Print absolute paths \
/^\// {print} \'
}
Antwoord 17
Dit is naïef, maar ik moest het MOSIX-compliant maken. Vereist toestemming aan CD in de map van het bestand.
#!/bin/sh
if [ ${#} = 0 ]; then
echo "Error: 0 args. need 1" >&2
exit 1
fi
if [ -d ${1} ]; then
# Directory
base=$( cd ${1}; echo ${PWD##*/} )
dir=$( cd ${1}; echo ${PWD%${base}} )
if [ ${dir} = / ]; then
parentPath=${dir}
else
parentPath=${dir%/}
fi
if [ -z ${base} ] || [ -z ${parentPath} ]; then
if [ -n ${1} ]; then
fullPath=$( cd ${1}; echo ${PWD} )
else
echo "Error: unsupported scenario 1" >&2
exit 1
fi
fi
elif [ ${1%/*} = ${1} ]; then
if [ -f ./${1} ]; then
# File in current directory
base=$( echo ${1##*/} )
parentPath=$( echo ${PWD} )
else
echo "Error: unsupported scenario 2" >&2
exit 1
fi
elif [ -f ${1} ] && [ -d ${1%/*} ]; then
# File in directory
base=$( echo ${1##*/} )
parentPath=$( cd ${1%/*}; echo ${PWD} )
else
echo "Error: not file or directory" >&2
exit 1
fi
if [ ${parentPath} = / ]; then
fullPath=${fullPath:-${parentPath}${base}}
fi
fullPath=${fullPath:-${parentPath}/${base}}
if [ ! -e ${fullPath} ]; then
echo "Error: does not exist" >&2
exit 1
fi
echo ${fullPath}
Antwoord 18
find / -samefile file.txt -print
vindt alle links naar het bestand met hetzelfde inode nummer als bestand.txt
Het toevoegen van een -xdev
vlag vermijdt find
om apparaatgrenzen over te steken (“Mount Points”). (Maar dit zal waarschijnlijk niets te vinden zijn als de find
niet start in een map op hetzelfde apparaat als file.txt
)
Houd er rekening mee dat find
meerdere paden kunnen melden voor een enkel bestandssysteemobject, omdat een inode kan worden gekoppeld door meer dan één directory-invoer, mogelijk zelfs met behulp van verschillende namen. Bijvoorbeeld:
find /bin -samefile /bin/gunzip -ls
wordt uitgevoerd:
12845178 4 -rwxr-xr-x 2 root root 2251 feb 9 2012 /bin/uncompress
12845178 4 -rwxr-xr-x 2 root root 2251 feb 9 2012 /bin/gunzip
Antwoord 19
Meestal:
find `pwd` | grep <filename>
Alternatief, alleen voor de huidige map:
find `pwd` -maxdepth 1 | grep <filename>
Antwoord 20
Ik hou van veel van de reeds gegeven antwoorden, maar ik heb dit echt nuttig gevonden, vooral binnen een script om het volledige pad van een bestand te krijgen, inclusief de volgende symlinks en relatieve referenties zoals .
en ..
dirname `readlink -e relative/path/to/file`
die het volledige pad van de file
van het root-pad retourneren.
Dit kan in een script worden gebruikt, zodat het script weet welk pad het loopt, wat handig is in een repository-kloon die ergens op een machine kan worden geplaatst.
basePath=`dirname \`readlink -e $0\``
Ik kan vervolgens de ${basePath}
-variabele in Mijn scripts gebruiken om rechtstreeks andere scripts te verwijzen.
Ik hoop dat dit helpt,
DAVE
Antwoord 21
Dit werkt met zowel Linux als Mac OSX ..
echo $(pwd)$/$(ls file.txt)
Antwoord 22
Dit werkt voor zowel bestand als map:
getAbsolutePath(){
[[ -d $1 ]] && { cd "$1"; echo "$(pwd -P)"; } ||
{ cd "$(dirname "$1")" || exit 1; echo "$(pwd -P)/$(basename "$1")"; }
}
Antwoord 23
Nog een Linux-hulpprogramma, dat doet deze taak:
fname <file>
Antwoord 24
Voor Mac OS, als u gewoon het pad van een bestand in de Finder wilt ontvangen, klikt u op het bestand en scrolt u naar “Services” onderaan. Je krijgt veel keuzes, waaronder “Pad Copy Path” en “Copy Full Path”. Als u op een van deze klikt, wordt het pad op het klembord geplaatst.
Antwoord 25
fp () {
PHYS_DIR=`pwd -P`
RESULT=$PHYS_DIR/$1
echo $RESULT | pbcopy
echo $RESULT
}
Kopieert de tekst naar uw klembord en geeft de tekst weer op het terminalvenster.
🙂
(ik heb een deel van de code gekopieerd van een ander stack overflow antwoord, maar kan dat antwoord niet meer vinden)
Antwoord 26
De eenvoudigste manier waarop ik heb gevonden, is
for i in `ls`; do echo "`pwd`/$i"; done
het werkt goed voor mij
Antwoord 27
In Mac OSX doet de volgende stappen:
cd
in de map van het doelbestand.- Typ een van de volgende terminalopdrachten.
Terminal
ls "`pwd`/file.txt"
echo $(pwd)/file.txt
- Vervang
file.txt
met uw werkelijke bestandsnaam. - Druk op ENTER kbd>
Antwoord 28
Naast "readlink -f" , een ander veelgebruikt commando:
$find /the/long/path/but/I/can/use/TAB/to/auto/it/to/ -name myfile /the/long/path/but/I/can/use/TAB/to/auto/it/to/myfile $
Dit geeft ook het volledige pad en de bestandsnaam op de console
Off-topic: deze methode geeft alleen relatievelinks, geen absolute. De opdracht readlink -f
is de juiste.
Antwoord 29
Maak een functie zoals de onderstaande (echot het absolute pad van een bestand met pwd en voegt het bestand toe aan het einde van het pad:
abspath() { echo $(pwd "$1")/"$1"; }
Je kunt nu elk bestandspad vinden:
abspath myfile.ext
Antwoord 30
Om het volledige pad van een bestand te krijgen:
1) open uw terminal in de map met uw bestand, door op de volgende toetsen op het toetsenbord te drukken:
CTRL+ ALT+ T
2) typ vervolgens "pwd" (acroniem van Print naam van Working Directory):
your@device ~ $ pwd
dat is alles mensen!