Dimungkinkan untuk menampilkan semua file dalam direktori saat ini dengan nama file yang tidak dimulai dengan angka genap diikuti dengan huruf alfabet?


0

Saya mencoba menjawab masalah ini untuk kelas COSC yang berfokus pada Linux / Unix.

Saya menggunakan Linux dengan bash shell. Saya baru mengenal Linux pada bulan September.

Instruktur saya memiliki pertanyaan ini dalam tugas minggu ini dan berdasarkan diskusi kelas, mulai dari dimasukkan, menjadi tidak. Saya benar-benar ingin memakukan ini setelah semua waktu yang saya habiskan untuk itu.

Perintah yang saya buat tidak memperhitungkan jika file memiliki nama yang dimulai dengan digit genap diikuti oleh digit lain menggunakan wildcard. Ini adalah titik yang sulit dengan pertanyaan yang dimasukkan atau dikecualikan dari tugas dan saya sudah berjam-jam mencoba untuk menyelesaikan ini.

Apakah itu mungkin?

Saya datang dengan:

echo [!02468][a-zA-Z]*

Setiap saran disambut dan sangat dihargai.

Jawaban:


2

Anda juga dapat melakukan hal berikut

shopt -s extglob
echo !([02468][a-zA-Z]*)
shopt -u extglob

Anda perlu mengaktifkan extglobdengan shopt -s extglobpertama.
Setelah itu Anda dapat menonaktifkannya lagi dengan shopt -u extglob.

Opsi shell extglob memberi Anda pencocokan pola yang lebih kuat di baris perintah.


0

Saya tidak berpikir itu mungkin dengan perintah sederhana. Yang berikut harus melakukan trik:

for i in *; do
  case "$i" in
    [02468][a-zA-Z]*) ;; # do nothing
    *) echo "$i" ;;
  esac
done

Aku sebenarnya baru saja menemukan jawabannya! echo [02468] [0-9] * | xargs echo [! 02468] [a-zA-Z] * Terima kasih atas balasan Anda. Anda membuat saya berpikir ke arah yang berbeda!
Kelly La Morge

Ini tidak berfungsi sama sekali. Jika tidak ada file yang cocok [02468] [0-9] * itu akan diteruskan secara harfiah ke xargs dan muncul di output. Dan file seperti 2.txt akan terlewatkan. Dan file seperti 11.txt akan terlewatkan.
Michael Suelmann


0

@ Rik menggunakan solusi extglobmungkin cara terbaik untuk bash. Jika Anda membutuhkan cara agnostik shell (dengan asumsi Anda menggunakan GNU find), coba ini:

find . -type f -not -name "[02468][a-zA-Z]*"
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.