Kecualikan file tersembunyi saat mencari dengan Unix / Linux?


35

Opsi apa yang perlu saya gunakan finduntuk mengecualikan file tersembunyi?


4
Selain itu: alasan tidak ada beberapa dukungan khusus untuk tugas ini adalah bahwa satu - satunya hal khusus tentang file dinamai dengan '.' adalah bahwa tidak ada terdaftar lskecuali diminta secara khusus: mereka adalah file yang benar-benar biasa dalam segala hal, hanya saja yang lsmemungkinkan Anda mengabaikannya secara default.
— dmckee

2
Pertanyaan: apakah Anda ingin menyembunyikan sesuatu .hidden/visible.txt?
— Keith Thompson

Jawaban:


14

Saya menemukan ini di sini :

find . \( ! -regex '.*/\..*' \) -type f -name "whatever"

Kenapa tidak adil \( ! -name '.*' \)?
— grawity

@grawity Saya baru saja menemukan itu, saya tidak tahu sepenuhnya cara kerjanya. Apakah Anda tidak hanya menyembunyikan file tersembunyi, tetapi direktori tersembunyi dan semua sub-konten dan file tersembunyi di subfolder?
— Jarvin

5
Tidak, itu tidak akan: / Tapi \( ! -path '*/.*' \)akan.
— grawity

@ kegembiraan Ya, saya kira saya membuat asumsi tentang apa yang diinginkan OP ... Solusi-nama Anda mungkin yang paling dekat dengan apa yang mereka minta.
— Jarvin

@ grawity & Dan: Bukan (! -path '^. *') ?? solusi Anda akan mengabaikan file apa pun yang memiliki '.' di mana saja dalam nama file seperti a.exe, b.out dll ....
— Software Mechanic

13

Sepertinya negasi pola glob tidak diketahui dengan baik. Jadi Anda bisa menggunakan:

find . -name "[!.]*"

12

Ini tidak menjawab pertanyaan Anda, tetapi untuk tugas menemukan file yang tidak disembunyikan saya ingin membiarkan find menemukan semua file kemudian filter dengan grep.

find . -type f | grep -v '/\.'

Mirip dengan pendekatan Anda tetapi mungkin sedikit lebih sederhana.


Ini adalah satu-satunya dari liners yang bekerja untuk saya.
— entpnerd

7

Coba findpenggunaan berikut ini :

find . -type f -not -path '*/\.*'

Yang akan mengabaikan semua file yang tersembunyi (file dan direktori dimulai dengan titik).


1

Saya menulis sebuah skrip bernama findnhyang saya percaya menangani kasus tepi tertentu lebih baik daripada jawaban untuk pertanyaan ini yang saya dapat temukan di web.

#!/bin/bash

declare -a paths

while [ $# -ne 0 ]; do
  case "$1" in -*) break ;; esac
  paths+=("$1")
  shift
done

find "${paths[@]}" \( -name . -o -name .. -o \! \( -name '.*' -prune \) \) "$@"

Misalnya, Anda dapat menemukan file dan direktori yang tidak tersembunyi di dalam direktori tersembunyi yang ditentukan secara eksplisit dengan perintah seperti findnh ~/.hiddendir/, yang akan ditampilkan ~/.hiddendir/filetetapi tidak ~/.hiddendir/.superhiddenfile.


1
Sedikit pengkodean yang bagus. Kecuali, ketika saya mencoba findnh ~/.hiddendir/, saya tidak mendapatkan apa-apa. Selain itu, bagaimana bedanya dengan ! -path '*/.*'dan find … | grep -v '/\.'?
— G-Man Mengatakan 'Reinstate Monica'

1

Jika Anda bertujuan untuk finddan grep, ripgrepapakah mengecualikan file tersembunyi secara default, mis

rg --files

--files Cetak setiap file yang akan dicari tanpa benar-benar melakukan pencarian.


1

fd

Gunakan fd, alternatif yang sederhana, jauh lebih cepat dan ramah pengguna find. Secara default, ini:

  • Abaikan direktori dan file yang tersembunyi, secara default.
  • Abaikan pola dari Anda .gitignore, secara default.

Periksa analisis Tolok Ukur .


1

Untuk menemukan file tersembunyi:

find -name '[.]*'

Untuk menemukan file yang terlihat:

find -name '[!.]*'

Sesederhana itu.

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.