Saya memerlukan file (sebaiknya file .list) yang berisi path absolut dari setiap file dalam direktori.
Contoh dir1: file1.txt file2.txt file3.txt
listOfFiles.list
:
/Users/haddad/dir1/file1.txt
/Users/haddad/dir1/file2.txt
/Users/haddad/dir1/file3.txt
Bagaimana saya bisa melakukan ini di linux / mac?
command-line
ls
filenames
arabian_albert
sumber
sumber
ls -d -1 $PWD/*
-1
opsi menjamin Anda mendapatkan satu nama file per barisls
mendeteksi apakah output ke file atau terminal.find
jawaban adalah solusi yang lebih baik, karena tidak akan gagal tidak peduli berapa banyak file yang akan terdaftar.Anda dapat menggunakan find. Dengan asumsi bahwa Anda hanya menginginkan file biasa, Anda dapat melakukan:
Anda dapat menyesuaikan parameter tipe yang sesuai jika Anda ingin jenis file lainnya.
sumber
ls
. Inifind
tidak mengulangi subdirektori, untuk non-rekursif Anda perlu menambahkan-maxdepth 1
sebelum-type
argumen.Perhatikan bahwa di:
Shell yang menghitung daftar file (tidak tersembunyi) di direktori dan meneruskan daftar
ls
.ls
cukup cetak daftar itu di sini, jadi Anda juga bisa:sumber
printf
memiliki bonus tambahan bahwa Anda tidak akan mendapatkan kesalahan 'command line terlalu lama' jika Anda memiliki ribuan file karenaprintf
tidak dijalankan sebagai proses terpisah.printf
yang tidak built-in sepertipdksh
dan beberapa turunannya atau sebagian besar versi shell Bourne. Satu kekurangan dibandingkan denganls -d
adalah bahwa jika tidak ada file yang tidak disembunyikan di sana, itu akan mencetak/path/to/*
sementarals
akan memberi Anda kesalahan tentang file yang tidak ada.Untuk melihat file biasa -
sumber
Anda bisa menggunakan
realpath
ataureadlink
:xargs
membangun dan mengeksekusi baris perintah dari input standar.realpath
: mengembalikan pathname absolut yang dikanonikalisasireadlink
: nilai baca tautan simboliksumber
dpkg -S /usr/bin/realpath
. Lihat ini .Cara lain dengan
tree
, tidak disebutkan di sini, itu berjalan secara rekursif dan tidak seperti menemukan atau ls Anda tidak memiliki kesalahan (seperti:Permission denied
,Not a directory
) Anda juga mendapatkan path absolut jika anda ingin memberi makan file kexargs
atau perintah lainarti opsi:
Untuk menginstal
tree
:sudo apt install tree
di Ubuntu / Debiansudo yum install tree
pada CentOS / Fedorasudo zypper install tree
pada OpenSUSEsumber
sudo apt install tree
di Ubuntusudo yum install tree
pada CentOSsudo zypper install tree
di OpenSUSEbrew install tree
pada MacDi lingkungan Linux yang lalu, saya memiliki
resolve
perintah yang akan membakukan jalur, termasuk membuat jalur relatif menjadi jalur absolut. Saya tidak dapat menemukannya sekarang, jadi mungkin itu ditulis oleh seseorang di organisasi itu.Anda dapat membuat skrip sendiri menggunakan fungsi di pustaka standar Python atau Perl (dan mungkin bahasa lain juga).
resolve.py
:resolve.pl
:Kemudian, Anda akan memecahkan masalah Anda dengan:
Dengan perintah ini, Anda juga dapat melakukan hal-hal seperti ini:
sumber