bagaimana agar 'menemukan' tidak mengembalikan direktori saat ini

11

Saat ini saya mencoba find(dan menyalin) semua file dan struktur folder yang cocok dengan pola tertentu, dalam direktori yang ditentukan dan saya sangat di sana!

Secara khusus, saya ingin menyalin semua folder secara rekursif yang tidak dimulai dengan karakter '_' dari jalur yang ditentukan.

find /source/path/with/directories -maxdepth 1 -type d ! -name _\* -exec cp -R {} /destination/path \;

Di / source / path / with / directories / path adalah direktori spesifik mesin yang dimulai dengan '_' dan lainnya, dan saya hanya tertarik untuk menyalin yang lain. Untuk alasan di luar saya, perintah find mengembalikan direktori / source / path / with / directories /, dan karenanya menyalin isinya, direktori dimulai dengan '_' yang disertakan.

Adakah yang punya petunjuk mengapa itu terjadi?

Terima kasih,

Pascal

Pinpin
sumber
untuk anak cucu: stackoverflow.com/questions/13525004/…
Trevor Boyd Smith

Jawaban:

14

findmengembalikan path root karena cocok dengan kriteria Anda — yaitu itu adalah direktori, dan itu tidak dimulai dengan _.

Anda sedang mencari -mindepth 1, saya kira:

$ cd /tmp
$ mkdir a
$ touch a/b
$ mkdir a/c
$ touch a/c/d
$ find a
a
a/b
a/c
a/c/d
$ find a -mindepth 1
a/b
a/c
a/c/d

Referensi: temukan halaman manual

zigg
sumber
Luar biasa! bekerja seperti yang saya inginkan. Saya membuatnya bekerja dengan menambahkan! -nama 'file' tetapi saya merasa salah ...
Pinpin
0

Ubah dari:

find /source/path/with/directories ...

untuk:

(shopt -s dotglob; find /source/path/with/directories/* ... )

Cara /source/path/with/directoriesitu tidak akan dimasukkan.

The shopt -s dotglobadalah agar *juga akan cocok file dan direktori dimulai dengan .(file tersembunyi, direktori).

Dan semuanya dibungkus dengan sub-shell (...)untuk membatasi efek shopthanya di dalam sub-shell, jika tidak Anda harus membatalkannya nanti dengan shopt -u dotglob.

janos
sumber
Itu akan gagal untuk entri direktori yang dimulai dengan .. Jangan coba-coba .*, atau Anda akan mencocokkan seluruh barang yang tidak pernah Anda inginkan. ;-)
zigg
Poin bagus, perbarui jawabannya, tambahkan menggunakan shopt.
janos