Eu preciso de um arquivo (de preferência um arquivo .list) que contenha o caminho absoluto de cada arquivo em um diretório.
Exemplo 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?
command-line
ls
filenames
arabian_albert
fonte
fonte
ls -d -1 $PWD/*
-1
opção garante-lhe obter um nome de arquivo por linhals
detecta se a saída é para um arquivo ou terminal.find
resposta de @Andy Dalton é uma solução melhor, pois ela não falha, não importa quantos arquivos devem ser listados.Você pode usar o find. Supondo que você queira apenas arquivos regulares, você pode:
Você pode ajustar o parâmetro type, conforme apropriado, se desejar outros tipos de arquivos.
fonte
ls
. Issofind
recursiva os subdiretórios, para não recursivos você precisa adicionar o argumento-maxdepth 1
before-type
.Observe que em:
É 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, para que você também possa:fonte
printf
tem o bônus adicional de que você não receberá um erro de 'linha de comando por muito tempo' se tiver milhares de arquivos, poisprintf
não é executado como um processo separado.printf
não é incorporado e empdksh
alguns de seus derivados ou na maioria das versões do shell Bourne. Uma desvantagem em comparaçãols -d
é que, se não houver um arquivo não oculto, ele será impresso/path/to/*
enquantols
ocorrerá um erro sobre a inexistência do arquivo .Para ver apenas arquivos regulares -
fonte
Você pode apenas usar
realpath
oureadlink
:xargs
construir e executar linhas de comando a partir da entrada padrão.realpath
: retorna o caminho absoluto canonizadoreadlink
: ler valor de um link simbólicofonte
dpkg -S /usr/bin/realpath
. Confira isso .Outra maneira de
tree
, não mencionado aqui, ocorrer recursivamente e, ao contrário de find ou se você não tiver nenhum erro (como:, )Permission denied
,Not a directory
você também obtém o caminho absoluto caso queira alimentar os arquivosxargs
ou outro comandoo significado das opções:
Para instalar
tree
:sudo apt install tree
no Ubuntu / Debiansudo yum install tree
no CentOS / Fedorasudo zypper install tree
no OpenSUSEfonte
sudo apt install tree
no Ubuntusudo yum install tree
no CentOSsudo zypper install tree
no OpenSUSEbrew install tree
no MacEm um ambiente Linux passado, eu tinha um
resolve
comando que padronizava os caminhos, incluindo transformar um caminho relativo em um caminho absoluto. Não encontro 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 em outras linguagens também).
resolve.py
:resolve.pl
:Em seguida, você resolveria seu problema com:
Com este comando, você também pode fazer coisas como estas:
fonte