Bagaimana cara menggemakan hanya nama file dari file jika saya mengulang direktori dengan loop for?
for filename in /home/user/*
do
echo $filename
done;
akan menarik jalur lengkap dengan nama file. Saya hanya ingin nama file.
Jika Anda menginginkan bash
solusi asli
for file in /home/user/*; do
echo "${file##*/}"
done
Di atas menggunakan Ekspansi Parameter yang merupakan bawaan dari shell dan tidak memerlukan panggilan ke biner eksternal sepertibasename
Namun, mungkin saya sarankan untuk menggunakan find
find /home/user -type f -printf "%f\n"
${file##*/}
untuk mengubah ke"${file##*/}"
untuk mendukung nama file dengan spasi misalnya "Nama file saya dengan spasi.txt".Gunakan saja
basename
:Tanda kutip diperlukan jika $ filename berisi misalnya spasi.
sumber
$()
seperti yang dilakukan Oli/test 1
,basename $(pwd)
keluaran:test
. Diuji di OS X dan Server Ubuntu (14.04). Solusi bash asli, seperti yang direkomendasikan @SiegeX, adalah yang berhasil untuk saya.basename "$(pwd)"
sebagai gantinya.$PWD
daripada menjalankan perintah.Penggunaan
basename
:sumber
echo
?basename
sudah print hasilnya.echo
bahkan mungkin mengacaukan hasilnya jika Anda tidak mengutip subkulit. Contoh:echo $(basename path/with\ \ spaces)
salah mencetakwith spaces
(hanya satu spasi).Pendekatan lain adalah dengan menggunakan
ls
saat membaca daftar file dalam direktori untuk memberikan apa yang Anda inginkan, yaitu "hanya nama file / s". Berbeda dengan membaca path file lengkap dan kemudian mengekstrak komponen "nama file" di badan loop for.Contoh di bawah ini yang mengikuti yang asli Anda:
Jika Anda menjalankan skrip di direktori yang sama dengan file, maka skrip menjadi:
sumber
ls
menyertakan dotfiles apa pun yang*
biasanya tidak dilakukan ekspansi. Jugafor f in $(...) ...
gagal jika nama file apa pun berisi spasi kecuali Anda menyetel IFS, mungkin gagal jika nama file apa pun berisi karakter glob kecuali Anda menyetel -f / -o noglob, dan bergantung pada sistem atau shellecho
mungkin gagal jika nama file berupa tanda hubung + huruf atau berisi garis miring terbalik. OTOHls -1 /path/to/dir
dengan sendirinya secara andal mencetak setiap nama file pada satu baris, modulo perbedaan dotfiles.jika Anda hanya ingin nama file:
untuk informasi lebih lanjut tentang
cut
perintah lihat di sini .sumber