Saya mencoba untuk daftar semua file dari dir1
, dir2
, dir3
dan dir4
yang mungkin di mana saja di sebagai sub direktori saya cwd
menggunakan find
perintah. Saya mencoba yang berikut ini tanpa hasil:
find . -type f -regextype posix-egrep -regex 'dir1/.+|dir2/.+|dir3/.+|dir4/.+'
Saya mencoba posix-extended
juga. Bagaimana saya bisa mendaftar file-file ini?
bash
find
regular-expression
Harun
sumber
sumber
Jawaban:
Dan jika Anda ingin mencari tiga folder bernama
foo
,bar
danbaz
untuk semua*.py
file, gunakan perintah ini:find foo bar baz -name "*.py"
jadi jika Anda ingin menampilkan file dari
dir1
dir2
dir3
penggunaanfind dir1 dir2 dir3 -type f
coba ini
find . \( -name "dir1" -o -name "dir2" \) -exec ls '{}' \;
sumber
./dir
sebagai gantidir
./path/to/dir1
), dalam hal./dir1
ini tidak ada.Cara terbaik untuk menggunakan direktif -path:
Yang berarti: temukan semua file di bawah direktori saat ini di mana ada 'dir1' atau 'dir2' atau 'dir3' atau 'dir4' di path.
sumber
-a
dan-o
untuk standar yang setara dengan GNU-and
/-or
.Hanya untuk memberi tahu semua orang. Menambahkan
.*/
sebelum masing-masingdir
memecahkan masalah karenaregex
cocok dengan path lengkap tampaknya.sumber
Ini adalah ide pertama saya setelah membaca jawaban sebelumnya:
Ini memperhitungkan, bahwa regex harus cocok dengan seluruh nama file, dan lebih mudah dimengerti.
sumber
Contoh fast (!) Menemukan file tertentu (access_log) di beberapa lokasi yang ditentukan oleh wildcard (direktori home) dan direktori log apache2 umum yang menerapkan juga pemfilteran nama untuk mengecualikan ssl log dan gzipped log lama. Tidak langsung menjawab pertanyaan di sini tetapi mungkin bermanfaat bagi seseorang yang menemukan petunjuk ini (seperti saya).
Hati-hati dengan ruang, khususnya di dekat
\(
dan\)
.Omong-omong, saya menggunakannya untuk apachetop, untuk menemukan situs web yang paling aktif di server saya.
sumber
Anda tidak perlu menentukan dir1 ke dir4 dengan nama jika Anda menggunakan regextype
type f
: cari file bukan direktoriregextype sed
: menggunakan sed regextyperegex
: pencarian menggunakan regex di seluruh jalur".*/dir[1-4]/[a-z0-9]*"
:. * di awal berarti sejumlah karakter yang dapat bertipe (char / number / backslash (/) dll); dir [1-4] berarti mencari "dir" diikuti oleh angka antara 1 dan 4; / [^ /] * menyatakan bahwa mengikuti dir1-4 menghilangkan semua nama path yang memiliki / di dalamnya, sehingga hanya mengembalikan file dalam direktori dir1-dir4 dan mengabaikan subdirektori yang mungkin berada dalam dir1-dir4.membuat direktori untuk Anda mengujinya: https://github.com/alphaCTzo7G/stackexchange/tree/master/linux/findSolution04092017
sumber
red
,green
,blue
danyellow
, atau mereka bisaJohn
,Paul
,George
danRingo
.) Jawaban Anda menganggap bahwa mereka adalah harfiahdir1
,dir2
,dir3
dandir4
. … (Lanjutan)foo_bar
,foo.txt
danFOO
)? (4) Mengapa teks Anda menjelaskan/[^/]*
ketika jawaban Anda tidak menggunakannya?Saya tahu Anda menentukan bahwa menggunakan find, tetapi hanya untuk menunjukkan opsi lain yang dapat digunakan, Anda dapat menggunakan xargs:
Anda dapat memiliki file bernama "folder" yang berisi sesuatu seperti:
Kemudian, Anda dapat melakukan sesuatu seperti ini:
xargs menurut saya, saya merasa lebih fleksibel daripada menemukan -exec. Anda juga dapat membuat beberapa hal gila seperti
sumber