Temukan nama file yang tidak mengandung string yang ditentukan


19

Saya ingin mengeksekusi kebalikan dari:

find . -name "*2013*"

Temukan semua file di direktori saat ini yang tidak mengandung string "2013" dalam nama mereka. Bagaimana saya bisa melakukan itu?

Jawaban:


28

Secara sederhana:

find . ! -name '*2013*'

Tambahkan ! -type djuga untuk mengecualikan file dari direktori jenis (seperti .itu sendiri), atau -type fhanya menyertakan file biasa , tidak termasuk semua jenis file lainnya (direktori, fifos, symlink, perangkat, soket ...).

Hati-hati namun yang *cocok dengan urutan 0 atau lebih karakter . Jadi itu bisa melaporkan nama file yang berisi 2013jika 2013itu didahului atau diikuti oleh sesuatu yang tidak dapat sepenuhnya diterjemahkan sebagai karakter yang valid di lokal saat ini.

Itu bisa terjadi jika Anda berada di lokal tempat karakter dapat dikodekan pada lebih dari satu byte (seperti dalam UTF-8) untuk nama file yang dikodekan dalam pengkodean yang berbeda. Misalnya, di lokal UTF-8, ia akan melaporkan Stéphane2013file jika ételah dikodekan dalam set karakter iso8859-15 (seperti byte 0xe9).

Yang terbaik adalah memastikan nama file dikodekan dalam set karakter lokal, tetapi jika Anda tidak dapat menjaminnya, pekerjaan di sekitar akan dijalankan finddi lokal C:

LC_ALL=C find . ! -name '*2013*'

4

Pola nama file Ksh cukup:

# files with 2013
ls -d -- *2013*

# files without 2013
ls -d -- !(*2013*)

Referensi

Jika shell Anda adalah bash, Anda harus menjalankannya shopt -s extglobsebelum Anda dapat menggunakan pola ini (Anda bisa memasukkannya ke dalam .bashrc). Jika shell Anda adalah zsh, Anda harus menjalankannya setopt ksh_glob(Anda dapat memasukkannya ke dalam .zshrc). Zsh juga menawarkan ls -d -- ^*2013*, yang membutuhkan pendahuluan setopt extended_glob.

Bergantung pada apa yang Anda lakukan dengan nama file ini, lsmungkin bukan perintah yang tepat untuk digunakan. Untuk menyimpannya dalam sebuah array

filenames=( !(*2013*) )
for f in "${filenames[@]}"; do ...; done

4
Itu tidak berulang di subdirektori dan akan melewatkan file dot (dan lsakan mengembalikan pesan kesalahan jika pola tidak cocok dengan file apa pun). Perhatikan juga bahwa kshakan mengurutkan daftar.
Stéphane Chazelas

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.