varios tamaño subdirectorios recursivo recursivamente por listar directorios contar carpeta buscar buscador archivos archivo linux unix recursion ls

subdirectorios - listar archivos por tamaño linux



Listar los archivos de forma recursiva en la CLI de Linux con una ruta relativa al directorio actual (12)

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 los caminos completos. Por ejemplo, tengo la siguiente estructura de directorios:

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

El código de arriba devolverá:

file.txt file1.txt file2.txt

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


Aquí hay un script de Perl:

sub format_lines($) { my $refonlines = shift; my @lines = @{$refonlines}; my $tmppath = "-"; foreach (@lines) { next if ($_ =~ /^/s+/); if ($_ =~ /(^/w+(///w*)*):/) { $tmppath = $1 if defined $1; next; } print "$tmppath/$_"; } } sub main() { my @lines = (); while (<>) { push (@lines, $_); } format_lines(/@lines); } main();

uso:

ls -LR | perl format_ls-LR.pl


Encuentre 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"


Eso hace el truco:

ls -R1 $PWD | while read l; do case $l in *:) d=${l%:};; "") d=;; *) echo "$d/$l";; esac; done | grep -i ".txt"

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


Para obtener los nombres reales de los archivos de ruta completa de los archivos deseados utilizando el comando de búsqueda, utilícelo con el comando pwd:

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


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

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

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


Podrías usar encontrar en su lugar:

find . -name ''*.txt''


Puede implementar esta funcionalidad como esta
En primer lugar, el uso del comando ls apuntaba al directorio de destino. Más tarde, utilizando el comando Buscar, filtre el resultado. En su caso, suena como: siempre el nombre de archivo comienza con un file***.txt palabra file***.txt

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


Si desea conservar 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


Tratar de find Puedes buscarlo exactamente en la página de manual, pero es algo así:

find [start directory] -name [what to find]

asi que para tu ejemplo

find . -name "*.txt"

Debería darte lo que quieres.


Utilice tree , 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


Utilice encontrar:

find . -name /*.txt -print

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


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

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