ls -d "$PWD"/* > listOfFiles.list
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?
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.
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"/*
Para ver apenas arquivos regulares -
find "$PWD" -type f > output
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
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
Tags command-line ls filenames