it-swarm-eu.dev

Jak mohu vygenerovat seznam souborů s jejich absolutní cestou v Linuxu?

Píšu skript Shell, který bere cesty souboru jako vstup.

Z tohoto důvodu musím vygenerovat rekurzivní výpisy souborů s plnými cestami. Například soubor bar má cestu:

/home/ken/foo/bar

ale pokud vidím, ls a find uvádějí pouze relativní výpisy cest:

./foo/bar   (from the folder ken)

Vypadá to jako zřejmý požadavek, ale na manuálových stránkách find nebo ls nevidím nic.

Jak mohu vygenerovat seznam souborů ve schránce včetně jejich absolutních cest?

244
Ken

Pokud dáte find absolutní cestu, kterou začíná, vytiskne absolutní cesty. Například pro nalezení všech souborů .htaccess v aktuálním adresáři:

find "$(pwd)" -name .htaccess

nebo pokud vaše Shell expanduje $PWD do aktuálního adresáře:

find "$PWD" -name .htaccess

find jednoduše předá cestu, kterou dostala, relativní cestě k souboru z této cesty.

Greg Hewgill také navrhl použití pwd -P, pokud chcete vyřešit symlinks ve vašem aktuálním adresáři.

246
Matthew Scharley
readlink -f filename 

dává úplnou absolutní cestu. ale pokud jde o soubor s odkazem, dostanete konečné vyřešené jméno.

179
balki

Použijte pro dirs (/ po ** je potřeba v bash pro jeho omezení na adresáře):

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

toto pro soubory a adresáře přímo pod aktuálním adresářem, jehož jména obsahují .:

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

to pro všechno:

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

Převzato odtud http://www.zsh.org/mla/users/2002/msg00033.html

V bashu je ** rekurzivní, pokud povolíte shopt -s globstar.

101
user431529

Můžeš použít

find $PWD 

in bash

24
Vinko Vrsalovic
ls -d "$PWD/"*

Vypadá to pouze v adresáři aktuální. Uvádí "$ PWD" v případě, že obsahuje mezery.

13
didi

$PWD je dobrá volba od Matthew výše. Pokud chcete najít pouze tisk souborů, můžete také přidat volbu -type f a prohledávat pouze normální soubory. Další možnosti jsou "d" pouze pro adresáře atd. Takže ve vašem případě by to bylo (pokud chci hledat pouze soubory s příponou .c ext):

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

nebo pokud chcete všechny soubory:

find $PWD -type f

Poznámka: Pro výše uvedený příkaz nemůžete vytvořit alias, protože $ PWD se automaticky doplní do vašeho domovského adresáře, když je alias nastaven bash.

5
Gurpreet

Pokud zadáte příkaz find absolutní cestu, vyplivne výsledky absolutní cestou. Takže z adresáře Ken byste měli psát:

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

(místo relativní cesty find . -name bar -print)

Měli byste získat:

/home/ken/foo/bar

Proto, pokud chcete ls -l a necháte ho vrátit absolutní cestu, stačí říct příkazu find, aby spustil ls -l na cokoli, co najde.

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

POZNÁMKA: Mezi {} a ; je mezera

Získáte něco takového:

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

Pokud si nejste jisti, kde se soubor nachází, můžete vždy změnit umístění hledání. Dokud vyhledávací cesta začíná „/“, dostanete na oplátku absolutní cestu. Pokud hledáte místo (jako /), kde budete dostávat mnoho chyb s odepřením oprávnění, doporučuji přesměrovat standardní chybu, abyste mohli skutečně vidět výsledky hledání:

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

(2> je syntaxe skořápek Borne a Bash, ale nebude fungovat s skořápkou C. Může to fungovat i v jiných skořápkách, ale vím jen to, že to funguje v Bourne a Bash).

4
Trudius

Příkaz:ls -1 -d "$PWD/"*

Tím získáte absolutní cesty souboru, jak je uvedeno níže.

[[email protected] ssl]# ls -1 -d "$PWD/"*
/etc/kubernetes/folder/file-test-config.txt
/etc/kubernetes/folder/file-test.txt
/etc/kubernetes/folder/file-client.txt
3
GSMurthy

Zde je příklad, který vytiskne seznam bez dalšího období a který také ukazuje, jak hledat shodu souboru. Snad to pomůže:

find . -type f -name "extr*" -exec echo `pwd`/{} \; | sed "s|\./||"
1
Mike Behr
lspwd() { for i in [email protected]; do ls -d -1 $PWD/$i; done }
1
rwilhelm