Como listar todos os arquivos em um diretório com caminhos absolutos

23

Eu preciso de um arquivo (preferencialmente um arquivo .list) que contenha o caminho absoluto de cada arquivo em um diretório.

Example dir1: file1.txt file2.txt file3.txt

listOfFiles.list :

/Users/haddad/dir1/file1.txt
/Users/haddad/dir1/file2.txt
/Users/haddad/dir1/file3.txt

Como posso fazer isso no linux / mac?

    
por arabian_albert 08.03.2016 / 19:57

7 respostas

22
ls -d "$PWD"/* > listOfFiles.list
    
por 08.03.2016 / 20:06
32

Você pode usar o find. Supondo que você queira apenas arquivos regulares, você pode fazer:

find /path/to/dir -type f > listOfFiles.list

Você pode ajustar o parâmetro de tipo conforme apropriado, se quiser outros tipos de arquivos.

    
por 08.03.2016 / 20:16
11

Observe que em:

ls -d "$PWD"/* > listOfFiles.list

É o shell que calcula a lista de arquivos (não ocultos) no diretório e passa a lista para ls . ls apenas imprime essa lista aqui, assim você poderia:

printf '%s\n' "$PWD"/*
    
por 08.03.2016 / 23:24
9

Para ver apenas arquivos regulares -

find "$PWD" -type f  > output
    
por 08.03.2016 / 20:16
3

Você pode usar apenas realpath ou readlink :

ls | xargs realpath
  • xargs construa e execute linhas de comando a partir da entrada padrão.
  • realpath : retorna o caminho absoluto canonicalizado
  • readlink : leia o valor de um link simbólico
por 17.05.2017 / 15:47
2

Em um ambiente Linux passado, eu tinha um comando resolve que padronizava caminhos, incluindo a criação de um caminho relativo em um caminho absoluto. Não consigo encontrá-lo agora, então talvez tenha sido escrito por alguém dessa organização.

Você pode criar seu próprio script usando funções nas bibliotecas padrão Python ou Perl (e provavelmente também em outros idiomas).

resolve.py :

#!/bin/env python

import sys
import os.path

for path in sys.argv:
    print os.path.abspath(path)

resolve.pl :

#!/bin/env perl

use warnings;
use Cwd qw ( abs_path );

foreach (@ARGV) {
    print abs_path($_), "\n";
}

Então, você resolveria seu problema com:

resolve.py * > listOfFiles.list

Com este comando, você também pode fazer coisas como esta:

cd /root/dir1/dir2/dir3
resolve.py ../../dir4/foo.txt
# prints /root/dir1/dir4/foo.txt
    
por 11.03.2016 / 23:32
2

Outra maneira com tree , não mencionada aqui, é recursiva e diferente de find ou ls você não tem erros (como: Permission denied , Not a directory ) você também obtém o caminho absoluto caso queira para alimentar os arquivos para xargs ou outro comando

tree -fai /pathYouWantToList >listOfFiles.list

o significado das opções:

-a     All  files  are  printed.  By default tree does not print hidden files (those beginning with a dot
       '.').  In no event does tree print the file system constructs '.'  (current  directory)  and  '..'
       (previous directory).

-i     Makes tree not print the indentation lines, useful when used in conjunction with the -f option.

-f     Prints the full path prefix for each file.

Para instalar o tree :

sudo apt install tree no Ubuntu / Debian

sudo yum install tree no CentOS / Fedora

sudo zypper install tree no OpenSUSE

    
por 08.02.2017 / 02:11