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''.