Potrzebuję pliku (najlepiej pliku .list), który zawiera bezwzględną ścieżkę każdego pliku w katalogu.
Przykład dir1: plik1.txt plik2.txt plik3.txt
listOfFiles.list
:
/Users/haddad/dir1/file1.txt
/Users/haddad/dir1/file2.txt
/Users/haddad/dir1/file3.txt
Jak mogę to zrobić w systemie Linux / Mac?
command-line
ls
filenames
arabian_albert
źródło
źródło
ls -d -1 $PWD/*
-1
opcja gwarantuje, że otrzymasz jedną nazwę pliku w wierszuls
wykrywa, czy wyjście jest do pliku lub terminala.find
jest lepszym rozwiązaniem, ponieważ nie zawiedzie, bez względu na to, ile plików ma być na liście.Możesz użyć find. Zakładając, że chcesz tylko zwykłe pliki, możesz:
Możesz odpowiednio dostosować parametr type, jeśli chcesz innych typów plików.
źródło
ls
. Powodujefind
to rekurencję podkatalogów, dla nierekurencyjnych należy dodać argument-maxdepth 1
przed-type
.Uwaga: w:
Jest to powłoka, która oblicza listę (nie ukrytych) plików w katalogu i przekazuje listę do
ls
.ls
po prostu drukuje tę listę tutaj, abyś mógł równie dobrze:źródło
printf
ma dodatkową zaletę, że nie pojawi się błąd „zbyt długiej linii poleceń”, jeśli masz tysiące plików, ponieważprintf
nie jest uruchamiany jako osobny proces.printf
nie jest wbudowany jakpdksh
i niektórych jego pochodnych lub większości wersji powłoki Bourne'a. Jedną wadą w porównaniu dols -d
tego jest to, że jeśli nie ma tam nie ukrytego pliku, zostanie wydrukowany,/path/to/*
als
zamiast tego wyświetlony zostanie komunikat o błędzie.Aby zobaczyć zwykłe pliki -
źródło
Możesz po prostu użyć
realpath
lubreadlink
:xargs
buduj i wykonuj wiersze poleceń ze standardowego wejścia.realpath
: zwraca kanoniczną bezwzględną nazwę ścieżkireadlink
: odczyt wartości dowiązania symbolicznegoźródło
dpkg -S /usr/bin/realpath
. Sprawdź to .Innym sposobem, ze
tree
nie tu wspomniano, przechodzi rekurencyjnie iw przeciwieństwie do znalezienia lub ls nie masz żadnych błędów (takich jak:Permission denied
,Not a directory
) można również uzyskać bezwzględną ścieżkę w przypadku, gdy chcesz karmić plikówxargs
lub innych poleceńopcje oznaczają:
Żeby zainstalować
tree
:sudo apt install tree
na Ubuntu / Debiansudo yum install tree
na CentOS / Fedorasudo zypper install tree
na OpenSUSEźródło
sudo apt install tree
na Ubuntusudo yum install tree
na CentOSsudo zypper install tree
na OpenSUSEbrew install tree
na MacuW poprzednim środowisku Linuksa miałem
resolve
polecenie standaryzujące ścieżki, w tym przekształcenie ścieżki względnej w ścieżkę bezwzględną. Nie mogę go teraz znaleźć, więc może został napisany przez kogoś z tej organizacji.Możesz stworzyć własny skrypt za pomocą funkcji w standardowych bibliotekach Python lub Perl (i prawdopodobnie także w innych językach).
resolve.py
:resolve.pl
:Następnie rozwiążesz swój problem z:
Za pomocą tego polecenia możesz także wykonywać takie czynności:
źródło