Saya memiliki folder bernama 'sampel' dan memiliki 3 file di dalamnya. Saya ingin menulis skrip shell yang akan membaca file-file ini di dalam folder sampel dan mempostingnya ke situs HTTP menggunakan curl.
Saya telah menulis yang berikut ini untuk membuat daftar file di dalam folder:
for dir in sample/*; do
echo $dir;
done
Tapi itu memberi saya output berikut:
sample/log
sample/clk
sample/demo
Itu melampirkan folder induk di dalamnya. Saya ingin output sebagai berikut (tanpa nama folder induk)
log
clk
demo
Bagaimana saya melakukan ini?
shell-script
files
directory
for
Raji
sumber
sumber
echo ${dir##*/}
untuk melepas jalan.Jawaban:
Gunakan
basename
untuk menghapus jalur utama dari file:Tapi mengapa tidak:
sumber
Dengan asumsi shell Anda mendukungnya, Anda dapat menggunakan ekspansi parameter
atau Anda bisa saja mengubah ke direktori itu dan melakukan listing di sana
sumber
--
diperlukan di sini. Argumen pertama adalah string tetap tanpa tanda hubung.${parameter##pattern}
didukung oleh semua shell POSIX.Karena sistem * nix memungkinkan hampir semua karakter menjadi bagian dari nama file (termasuk termasuk spasi, baris baru, koma, simbol pipa, dll.), Anda tidak boleh menguraikan output dari perintah "ls" dalam skrip shell. Itu tidak bisa diandalkan. Lihat Mengapa Anda tidak harus menguraikan output ls .
Gunakan "find" untuk membuat daftar file. Jika Anda menggunakan Bash, Anda dapat memasukkan output "find" ke dalam array. Contoh di bawah ini, dengan peringatan bahwa saya menggunakan perintah "curl" yang tidak berfungsi!
sumber
Itu tergantung apa yang ingin Anda lakukan dengan direktori.
Untuk hanya mencetak nama, tanpa memeriksa apakah itu adalah direktori Anda dapat menggunakan ls:
Lebih baik ditemukan, karena Anda dapat menggunakan filter:
Jika Anda ingin menjalankan perintah pada file, Anda harus menggunakan find dan bukan untuk loop:
sumber