@Joseph R.'nin cevabından başlayarak, komutun çalışmasını sağlayamadığım için bulmayla çalışmasını sağlamak için bu benim çözümüm. (Bunun geçerli olduğunu düşünmüyorum, çünkü uygulanan kurallar \+: {}öğeden sonra hiçbir şey olamaz .) (Yorum yapamadım. Bu paragrafın tamamı kaldırılabilir.)
Tüm dosyaları tam olarak aynı dizine kopyalamak için (burada target/directory):
find directory/to/copy -type f -exec install -Dm 755 "{}" "target/directory" \;
-D burada zorunlu değildir, sadece hedefe var olmayan dizinleri oluşturur.
Şu anda bulunduğunuz yerden başlayarak bir dizin hiyerarşisinin tamamını ve dosyalarını (bu, boş dizinleri atlar) kopyalamak için:
find directory/tree/to/copy -type f -exec install -Dm 755 "{}" "target/directory/{}" \;
Söylendiği gibi, bu ağaçtan itibaren yeniden yaratacaktır $PWD. Eğer boş bir dizin kopyalamak gerekiyorsa Ayrıca, kullandığınız bir yolunu bulabiliriz -type darasında findve install -d.
Yani, ağacı kopyalamak için olmayan bir dizinden başlayarak $PWD:
(cd parent/directory && find directory/tree/to/copy -type f -exec install -Dm 755 "{}" "target/directory/{}" \;)
Nasıl parent/directorykopyalanmadığına dikkat edin .
Ekstra
Kullananlar için shell/fish, aynı şeyi yapan çizgi:
fish -c 'cd parent/directory; and find directory/tree/to/copy -type f -exec install -Dm 755 "{}" "target/directory/{}" \\;'