Listar archivos recursivamente en la CLI de Linux con la ruta relativa al directorio actual

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

  •  05-07-2019
  •  | 
  •  

Pregunta

Esto es similar a esta pregunta , pero quiero incluir la ruta relativa al directorio actual en Unix. Si hago lo siguiente:

ls -LR | grep .txt

No incluye las rutas completas. Por ejemplo, tengo la siguiente estructura de directorios:

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

El código anterior devolverá:

file.txt
file1.txt
file2.txt

¿Cómo puedo hacer que incluya las rutas relativas al directorio actual usando los comandos estándar de Unix?

¿Fue útil?

Solución

Use find:

find . -name \*.txt -print

En los sistemas que usan GNU find, como la mayoría de las distribuciones de GNU / Linux, puede omitir la impresión.

Otros consejos

Use el árbol , con -f (ruta completa) y -i (sin líneas de sangría):

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

Luego puede usar grep para filtrar los que desee.


Si no se encuentra el comando, puede instalarlo:

Escriba el siguiente comando para instalar el comando de árbol en RHEL / CentOS y Fedora Linux:

# yum install tree -y

Si está utilizando Debian / Ubuntu, Mint Linux escriba el siguiente comando en su terminal:

$ sudo apt-get install tree -y

Pruebe find . Puede buscarlo exactamente en la página del manual, pero es así:

find [directorio de inicio] -name [qué encontrar]

así que para tu ejemplo

buscar. -name " *. txt "

debería darte lo que quieres.

Puede usar find en su lugar:

find . -name '*.txt'

Eso hace el truco:

ls -R1 $ PWD | mientras lee l; hacer caso $ l en * :) d = $ {l%:} ;; " ") d = ;; *) echo " $ d / $ l " ;;; esac; hecho | grep -i " .txt "

Pero lo hace al "pecar" sin embargo, con el análisis de ls , que las comunidades GNU y Ghostscript consideran una mala forma.

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

'sed' borrará 'your_path' de todos los resultados 'find'. Y recibe en relación con la ruta 'DIR'.

Para obtener los nombres de archivo de ruta completa de los archivos deseados utilizando el comando find, úselo con el comando pwd:

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

Aquí hay un script de Perl:

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

    foreach (@lines)
    {
        next if (

Aquí hay un script de Perl:

ls -LR | perl format_ls-LR.pl

uso:

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

Aquí hay un script de Perl:

<*>

uso:

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

Aquí hay un script de Perl:

<*>

uso:

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

Aquí hay un script de Perl:

<*>

uso:

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

uso:

<*>

Podría crear una función de shell, p. en su .zshrc o .bashrc :

filepath() {
    echo $PWD/$1
}

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

El primero solo funcionaría en archivos individuales, obviamente.

Busque el archivo llamado " nombre de archivo " en su sistema de archivos comenzando la búsqueda desde el directorio raíz " / " ;. El " nombre de archivo "

find / -name "filename" 

Si desea preservar los detalles, incluya ls como tamaño de archivo, etc. en su salida, entonces esto debería funcionar.

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

Puede implementar esta funcionalidad de esta manera
En primer lugar, el uso del comando ls apuntó al directorio de destino. Más tarde, usando el comando find, filtra el resultado de él Desde su caso, parece que siempre el nombre del archivo comienza con una palabra file***.txt

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

En el fish , puede hacer esto para enumerar todos los archivos PDF de forma recursiva, incluidos los del directorio actual :

$ ls **pdf

Simplemente elimine 'pdf' si desea archivos de cualquier tipo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top