Hoe kan ik een lijst met bestanden genereren met hun absolute pad in Linux?

Ik ben een shellscript aan het schrijven dat bestandspaden als invoer gebruikt.

Om deze reden moet ik recursieve bestandslijsten met volledige paden genereren. Het bestand barheeft bijvoorbeeld het pad:

/home/ken/foo/bar

maar, voor zover ik kan zien, geven zowel lsals findalleen relatieve padlijsten:

./foo/bar   (from the folder ken)

Het lijkt een voor de hand liggende vereiste, maar ik kan niets zien in de man-pagina’s findof ls.

Hoe kan ik een lijst met bestanden in de shell genereren, inclusief hun absolute paden?


Antwoord 1, autoriteit 100%

Als je findeen absoluut pad geeft om mee te beginnen, zal het absolute paden afdrukken. Om bijvoorbeeld alle .htaccess-bestanden in de huidige map te vinden:

find "$(pwd)" -name .htaccess

of als je shell $PWDuitbreidt naar de huidige map:

find "$PWD" -name .htaccess

findvoegt gewoon het pad toe aan een relatief pad naar het bestand vanaf dat pad.

Greg Hewgillstelde ook voor om pwd -Pte gebruiken als je symlinks wilt oplossen in uw huidige directory.


Antwoord 2, autoriteit 60%

readlink -f filename 

geeft het volledige absolute pad. maar als het bestand een symbolische link is, krijg je de uiteindelijke naam.


Antwoord 3, autoriteit 40%

Gebruik dit voor dirs (de /na **is nodig in bash om het te beperken tot mappen):

ls -d -1 "$PWD/"**/

dit voor bestanden en mappen direct onder de huidige map, waarvan de namen een .:

ls -d -1 "$PWD/"*.*

dit voor alles:

ls -d -1 "$PWD/"**/*

Vanaf hier genomen
http://www.zsh.org/mla/users/2002/msg00033.html

In bash is **recursief als je shopt -s globstarinschakelt.


Antwoord 4, autoriteit 12%

U kunt

. gebruiken

find $PWD 

in bash


Antwoord 5, autoriteit 8%

ls -d "$PWD/"* 

Dit kijkt alleen in de huidigedirectory. Het citeert “$PWD” voor het geval het spaties bevat.


Antwoord 6, autoriteit 3%

Opdracht:ls -1 -d "$PWD/"*

Dit geeft de absolute paden van het bestand zoals hieronder.

[root@kubenode1 ssl]# ls -1 -d "$PWD/"*
/etc/kubernetes/folder/file-test-config.txt
/etc/kubernetes/folder/file-test.txt
/etc/kubernetes/folder/file-client.txt

Antwoord 7, autoriteit 2%

De $PWDis een goede optie van Matthew hierboven. Als u wilt zoeken om alleen bestanden af ​​te drukken, kunt u ook de optie -type f toevoegen om alleen normale bestanden te zoeken. Andere opties zijn “d” voor alleen mappen enz. Dus in jouw geval zou het zijn (als ik alleen naar bestanden met .c ext wil zoeken):

find $PWD -type f -name "*.c" 

of als je alle bestanden wilt:

find $PWD -type f

Opmerking: je kunt geen alias maken voor de bovenstaande opdracht, omdat $PWD automatisch wordt aangevuld in je thuismap wanneer de alias wordt ingesteld door bash.


Antwoord 8, autoriteit 2%

Als je het find-commando een absoluut pad geeft, zal het de resultaten uitspugen met een absoluut pad. Dus, uit de Ken-directory als je zou typen:

find /home/ken/foo/ -name bar -print    

(in plaats van het relatieve pad find . -name bar -print)

Je zou moeten krijgen:

/home/ken/foo/bar

Daarom, als je een ls -lwilt en het het absolute pad wilt laten retourneren, kun je het find commando gewoon vertellen om een ​​ls -luit te voeren op wat het ook is vondsten.

find /home/ken/foo -name bar -exec ls -l {} ;\ 

OPMERKING: er is een spatie tussen {}en ;

Je krijgt zoiets als dit:

-rw-r--r--   1 ken admin       181 Jan 27 15:49 /home/ken/foo/bar

Als u niet zeker weet waar het bestand zich bevindt, kunt u altijd de zoeklocatie wijzigen. Zolang het zoekpad begint met “/”, krijg je een absoluut pad terug. Als u een locatie zoekt (zoals /) waar u veel fouten met geweigerde toestemmingen krijgt, raad ik u aan de standaardfout om te leiden, zodat u de zoekresultaten daadwerkelijk kunt zien:

find / -name bar -exec ls -l {} ;\ 2> /dev/null

(2>is de syntaxis voor de Borne- en Bash-shells, maar werkt niet met de C-shell. Het kan ook in andere shells werken, maar ik weet alleen zeker dat het werkt in Bourne en Bash).


Antwoord 9

fd

Gebruik fd(alternatief voor find), gebruik de volgende syntaxis:

fd . foo -a

Waarbij .het zoekpatroon is en foode hoofdmap is.

Bijvoorbeeld om alle bestanden in etcrecursief weer te geven, voer je uit: fd . /etc -a.

-a, --absolute-pathToon absolute in plaats van relatieve paden


Antwoord 10

Gewoon een alternatief voor

ls -d "$PWD/"* 

om aan te geven dat *shell-uitbreiding is, dus

echo "$PWD/"*

zou hetzelfde doen (het nadeel dat u -1niet kunt gebruiken om te scheiden door nieuwe regels, niet door spaties).


Antwoord 11

Als u een lijst met alle bestanden in huidige en submappen nodig heeft

find $PWD -type f

Als u alleen een lijst met alle bestanden in de huidige map nodig heeft

find $PWD -maxdepth 1 -type f

Antwoord 12

Probeer dit:

find $PWD/

Je krijgt een lijst met absolute padenin de werkmap.


Antwoord 13

Je kunt doen

ls -1 |xargs realpath

Als u een absoluut pad of relatief pad moet opgeven, kunt u dat ook doen

ls -1 $FILEPATH |xargs realpath

Antwoord 14

lspwd() { for i in $@; do ls -d -1 $PWD/$i; done }

Antwoord 15

Hier is een voorbeeld dat een lijst afdrukt zonder een extra punt en dat ook laat zien hoe te zoeken naar een bestandsovereenkomst. Ik hoop dat dit helpt:

find . -type f -name "extr*" -exec echo `pwd`/{} \; | sed "s|\./||"

Antwoord 16

Dit werkte voor mij. Maar het stond niet in alfabetische volgorde.

find "$(pwd)" -maxdepth 1

Dit commando geeft een alfabetische lijst en ook verborgen bestanden.

ls -d -1 "$PWD/".*; ls -d -1 "$PWD/"*;

Antwoord 17

stat

Absoluut pad van een enkel bestand:

stat -c %n "$PWD"/foo/bar

Antwoord 18

Misschien wil je dit proberen.

for name in /home/ken/foo/bar/*
do
    echo $name
done

Je kunt het abs-pad krijgen met de for-lus en echogewoon zonder find.


Antwoord 19

Dit geeft het canonieke pad (lost symbolische links op): realpath FILENAME

Als je een canoniek pad naar de symbolische link zelf wilt, dan: realpath -s FILENAME


Antwoord 20

De meeste, zo niet alle voorgestelde methoden resulteren in paden die niet rechtstreeks in een ander terminalcommando kunnen worden gebruikt als het pad spaties bevat. Idealiter worden er schuine strepen aan de resultaten toegevoegd.
Dit werkt voor mij op macOS:

find / -iname "*SEARCH TERM spaces are okay*" -print 2>&1  | grep -v denied |grep -v permitted |sed -E 's/\ /\\ /g'

Antwoord 21

Recursieve bestanden kunnen in Linux op vele manieren worden weergegeven. Hier deel ik een voeringscript om alle logbestanden van bestanden (alleen bestanden) uit de /var/log/-directory te wissen en ten tweede om recentelijk te controleren welk logbestand een invoer heeft gemaakt.

Eerst:

find /var/log/ -type f  #listing file recursively 

Tweede:

for i in $(find $PWD -type f) ; do cat /dev/null > "$i" ; done #empty files recursively 

Derde gebruik:

ls -ltr $(find /var/log/ -type f ) # listing file used in recent

Opmerking: voor de locatie van de directory kunt u ook $PWDdoorgeven in plaats van /var/log.


Antwoord 22

Als je geen symbolische links hebt, kun je het proberen

tree -iFL 1 [DIR]

-imaakt boomafdrukbestandsnamen in elke regel, zonder de boomstructuur.

-flaat tree het volledige pad van elk bestand afdrukken.

-L 1voorkomt recursie van de boom.


Antwoord 23

vind jar-bestand recursief en druk absoluut pad af

`ls -R |grep "\.jar$" | xargs readlink -f`                                                                                                                                                                                                                                                               
/opt/tool/dev/maven_repo/com/oracle/ojdbc/ojdbc8-19.3.0.0.jar
/opt/tool/dev/maven_repo/com/oracle/ojdbc/ons-19.3.0.0.jar
/opt/tool/dev/maven_repo/com/oracle/ojdbc/oraclepki-19.3.0.0.jar
/opt/tool/dev/maven_repo/com/oracle/ojdbc/osdt_cert-19.3.0.0.jar
/opt/tool/dev/maven_repo/com/oracle/ojdbc/osdt_core-19.3.0.0.jar
/opt/tool/dev/maven_repo/com/oracle/ojdbc/simplefan-19.3.0.0.jar
/opt/tool/dev/maven_repo/com/oracle/ojdbc/ucp-19.3.0.0.jar

Antwoord 24

find / -printzal dit doen


Antwoord 25

ls -1 | awk  -vpath=$PWD/ '{print path$1}'

LEAVE A REPLY

Please enter your comment!
Please enter your name here

19 − sixteen =

Other episodes