'bul' geçerli dizini döndürmemesi


11

Şu anda find(ve belirli bir desen, belirli bir dizinde eşleşen tüm klasör ve klasör yapısını kopyalamaya çalışıyorum ve neredeyse oradayım!

Özellikle, belirli bir yoldan '_' karakteriyle başlamayan tüm klasörleri özyinelemeli olarak kopyalamak istiyorum.

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

/ Source / path / with / directories / path içinde '_' ve diğerleriyle başlayan makineye özgü dizinler vardır ve yalnızca diğerlerini kopyalamakla ilgileniyorum. Benden öte bir nedenle, find komutu / source / path / with / directories / dizinini döndürür ve bu nedenle içeriğini, '_' ile başlayan dizinleri kopyalar.

Bunun neden olduğuna dair bir ipucu var mı?

Teşekkürler,

paskal


Yanıtlar:


14

findkök yolu, ölçütlerinizle eşleştiği için döndürür; yani, bir dizindir ve ile başlamaz _.

-mindepth 1Şunu arıyorsunuz , şüpheliyim:

$ 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

Referans: manpage'i bul


Mükemmel! istediğim gibi çalışıyor. Ekleyerek çalışmasını sağladım!
-dosyalar

0

Şununla değiştir:

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

için:

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

Bu şekilde /source/path/with/directoriesdahil edilmeyecektir.

Böylece shopt -s dotglob, *bir .(gizli dosyalar, dizinler) ile başlayan dosya ve dizinlerle de eşleşecektir .

Ve her şey sadece alt kabuk içindeki (...)etkisini sınırlamak için bir alt kabuğa sarılır shopt, aksi takdirde daha sonra geri almanız gerekir shopt -u dotglob.


Bu, ile başlayan dizin girişleri için başarısız olur .. Siz de denemeyin .*, yoksa hiç istemediğiniz bir çok şeyi eşleştireceksiniz. ;-)
zigg

İyi bir nokta, cevabı güncelledi, kullanarak eklendi shopt.
janos
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.