Saya ingin menjalankan perintah ke:
- Temukan semua direktori dengan nama "
inc
" di bawah folder "X
". - Daftar semua subdirektori di bawah setiap "
X/.../inc/
". - Redirect output ke file bernama "
list
"
Saya mencoba berbagai kombinasi perintah di bawah ini, tetapi tidak berhasil:
$ find X/ -name "inc" -print | xargs find {} -type d > list
find: path must precede expression
Bagaimana saya bisa melakukan ini?
linux
command-line
find
iammilind
sumber
sumber
Berikut ini adalah one-liner yang berguna:
Ini berjalan
find
pada setiapfind
hasil pertama . Theexec
pilihan juga dapat mengambil perintah shell minimal, di mana - seperti yang saya katakan -{}
diganti dengan setiap direktori yang pertamafind
.Yang kedua
find
akan, sesuai permintaan Anda, "daftar semua subdirektori" dari hasil pertama, termasukinc
direktori. Jika Anda tidak ingin itu sendiri dalam output, biarkan folder output kedalamanfind
paling sedikit kedua .Kami kemudian hanya akan mengarahkan perintah
stdout
kelist
.sumber
find path -name inc -type d -exec sh -c 'find {} -mindepth 1 -maxdepth 1 -type d' \;
Baiklah saya telah menemukan jawaban untuk mensimulasikan temuan bersarang ini:
sumber
find X/ -type d -print0 | awk 'BEGIN{RS="\0"}/\/inc\//' > list
(grep -z
juga membatasi pada karakter null, tetapi outputnya tampaknya juga dipisahkan nol, sehingga orang perlu menyalurkannya melalui mis.xargs -0L1 echo
Untuk mendapatkannya baris demi baris ). Dalam hal ini, karena Anda menyimpan daftar ke file dengan setiap entri dipisahkan oleh baris baru, baris baru dalam nama file akan tetap diwakili secara ambigu. Mungkin Anda bahkan tidak memerlukan file perantara, tergantung pada apa yang ingin Anda lakukan dengan daftar.Coba ini:
sumber
"\inc\"
:)-path
bendera