GNU/Linux >> Belajar Linux >  >> Linux

Ekstrak nama file dasar tanpa jalur dan ekstensi di bash

Perintah basename memiliki dua doa yang berbeda; di satu, Anda hanya menentukan jalur, dalam hal ini memberi Anda komponen terakhir, sedangkan di yang lain Anda juga memberikan sufiks yang akan dihapus. Jadi, Anda dapat menyederhanakan kode contoh Anda dengan menggunakan doa kedua dari nama dasar. Juga, berhati-hatilah untuk mengutip hal-hal dengan benar:

fbname=$(basename "$1" .txt)
echo "$fbname"

Berikut adalah oneliners:

  1. $(basename "${s%.*}")
  2. $(basename "${s}" ".${s##*.}")

Saya membutuhkan ini, sama seperti yang diminta oleh bongbang dan w4etwetewtwet.


Anda tidak perlu memanggil basename eksternal memerintah. Sebagai gantinya, Anda dapat menggunakan perintah berikut:

$ s=/the/path/foo.txt
$ echo "${s##*/}"
foo.txt
$ s=${s##*/}
$ echo "${s%.txt}"
foo
$ echo "${s%.*}"
foo

Perhatikan bahwa solusi ini harus bekerja di semua (pasca 2004 ) POSIX shell yang sesuai, (mis. bash , dash , ksh , dll.).

Sumber:Bahasa Perintah Shell 2.6.2 Ekspansi Parameter

Lebih lanjut tentang Manipulasi String bash:http://tldp.org/LDP/LG/issue18/bash.html


Kombinasi nama dasar dan cut berfungsi dengan baik, bahkan dalam kasus akhiran ganda seperti .tar.gz :

fbname=$(basename "$fullfile" | cut -d. -f1)

Akan menarik jika solusi ini membutuhkan daya aritmatika yang lebih sedikit daripada Ekspansi Parameter Bash.


Linux
  1. Cara Menyembunyikan File Dan Folder di File Manager Tanpa Mengganti Nama

  2. temukan dan salin file menggunakan Bash

  3. Dapatkan dirname/nama file terakhir dalam argumen jalur file di Bash

  1. Cara mengekstrak file .gz dan .tar.gz di Linux

  2. Tampilan Lengkap Di Mana Variabel Path Diatur Di Bash?

  3. Unix - buat jalur folder dan file

  1. Tar:Ekstrak File Tunggal Ke Direktori Tanpa Membuat Subfolder?

  2. Menggunakan Perintah Nama Dasar Linux di Skrip Bash

  3. Bagaimana Anda menormalkan jalur file di Bash?