Elenca i file in modo ricorsivo nell'interfaccia della riga di comando di Linux con il percorso relativo alla directory corrente

StackOverflow https://stackoverflow.com/questions/245698

  •  05-07-2019
  •  | 
  •  

Domanda

Ciò è simile a questa domanda , ma voglio includere il percorso relativo alla directory corrente in unix. Se faccio quanto segue:

ls -LR | grep .txt

Non include i percorsi completi. Ad esempio, ho la seguente struttura di directory:

test1/file.txt
test2/file1.txt
test2/file2.txt

Il codice sopra restituirà:

file.txt
file1.txt
file2.txt

Come posso ottenere che includa i percorsi relativi alla directory corrente usando i comandi Unix standard?

È stato utile?

Soluzione

Usa trova:

find . -name \*.txt -print

Sui sistemi che usano GNU find, come la maggior parte delle distribuzioni GNU / Linux, è possibile tralasciare -print.

Altri suggerimenti

Usa tree , con -f (percorso completo) e -i (nessuna riga di rientro):

tree -if --noreport .
tree -if --noreport directory/

È quindi possibile utilizzare grep per filtrare quelli desiderati.


Se il comando non viene trovato, è possibile installarlo:

Digitare il comando seguente per installare il comando tree su RHEL / CentOS e Fedora linux:

# yum install tree -y

Se stai usando Debian / Ubuntu, Mint Linux digita il seguente comando nel tuo terminale:

$ sudo apt-get install tree -y

Prova trova . Puoi cercarlo esattamente nella pagina man, ma è in questo modo:

find [start directory] -name [cosa trovare]

quindi per il tuo esempio

trova. -name " *. txt "

dovrebbe darti quello che vuoi.

Invece puoi usare find:

find . -name '*.txt'

Questo è il trucco:

ls -R1 $ PWD | mentre leggi l; fai $ l in * :) d = $ {l%:} ;; " ") d = ;; *) eco "$ d / $ l" ;;; esac; fatto | grep -i " .txt "

Ma lo fa "peccando". con l'analisi di ls , tuttavia, che è considerata una cattiva forma dalle comunità GNU e Ghostscript.

DIR=your_path
find $DIR | sed 's:""$DIR""::'

'sed' cancellerà 'your_path' da tutti i risultati 'find'. E ricevi relativamente al percorso "DIR".

Per ottenere i nomi dei file dei percorsi completi effettivi dei file desiderati usando il comando find, usalo con il comando pwd:

find $(pwd) -name \*.txt -print

Ecco uno script Perl:

sub format_lines($)
{
    my $refonlines = shift;
    my @lines = @{$refonlines};
    my $tmppath = "-";

    foreach (@lines)
    {
        next if (

Ecco uno script Perl:

ls -LR | perl format_ls-LR.pl

utilizzo:

<*> =~ /^\s+/); if (

Ecco uno script Perl:

<*>

utilizzo:

<*> =~ /(^\w+(\/\w*)*):/) { $tmppath = $1 if defined $1; next; } print "$tmppath/

Ecco uno script Perl:

<*>

utilizzo:

<*>"; } } sub main() { my @lines = (); while (<>) { push (@lines,

Ecco uno script Perl:

<*>

utilizzo:

<*>); } format_lines(\@lines); } main();

utilizzo:

<*>

È possibile creare una funzione shell, ad es. nel tuo .zshrc o .bashrc :

filepath() {
    echo $PWD/$1
}

filepath2() {
    for i in $@; do
        echo $PWD/$i
    done
}

Il primo funzionerebbe solo su singoli file, ovviamente.

Trova il file chiamato " nomefile " sul tuo filesystem avviando la ricerca dalla directory principale " / " ;. Il " nomefile "

find / -name "filename" 

Se si desidera preservare i dettagli forniti con ls come dimensione del file ecc. nell'output, questo dovrebbe funzionare.

sed "s|<OLDPATH>|<NEWPATH>|g" input_file > output_file

Puoi implementare questa funzionalità come questa
Innanzitutto, utilizzando il comando ls puntava alla directory di destinazione. Successivamente, utilizzando il comando find, filtrare il risultato da esso. Dal tuo caso, sembra: sempre il nome del file inizia con una parola file ***. Txt

ls /some/path/here | find . -name 'file*.txt'   (* represents some wild card search)

Nella fish , puoi farlo per elencare tutti i pdf in modo ricorsivo, compresi quelli nella directory corrente :

$ ls **pdf

Rimuovi semplicemente 'pdf' se vuoi file di qualsiasi tipo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top