Saya ingin menyalin file yang dimodifikasi di repositori svn ke direktori lain, sambil tetap struktur direktori mereka.
Setelah membaca halaman awk dan xargs, saya menemukan cara untuk mengganti nama file seperti ini:
$ svn status -q | awk '{ print $2 }' | xargs -d \\n -I '{}' cp '{}' /tmp/xen/
Tetapi masalahnya adalah bahwa dengan cara ini struktur direktori tidak dipertahankan, saya ingin menyalin file seperti ini:
./common/superp.c -> /tmp/xen/common/superp.c
./common/m2mgr.c -> /tmp/xen/common/m2mgr.c
./common/page_alloc.c -> /tmp/xen/common/page_alloc.c
./arch/x86/mm.c -> /tmp/xen/arch/x86/mm.c
./arch/x86/mm/shadow/private.h -> /tmp/xen/arch/x86/mm/shadow/private.h
Saya telah mencoba mengubah perintah cp menjadi cp '{}' / tmp / xen / '{}' tetapi dikatakan tidak ada file atau direktori tersebut. Apakah ada cara untuk membuat file copy cp dan membuat direktori jika diperlukan? Dan tolong tunjukkan apakah rantai perintah ini dapat disederhanakan. :-)
Terima kasih atas semua balasan Anda. Karena direktori agak besar, saya tidak ingin menyalin seluruh direktori menggunakan cp -R atau rsync. Saran CK untuk menggunakan pipa tar cukup berguna.
svn status -q | awk '{ print $2 }' | xargs tar cf - | (cd /tmp/xen/; tar xvf -)
sumber
Inilah satu kalimat untuk referensi:
Dan dalam bahasa Inggris:
svn status -q
, yang disalurkan ke ...awk '{print $2}'
xargs tar -c
-x
) ke direktori target (-C path
):tar -xC /tmp/xen
sumber
Gunakan "dirname" untuk mengekstrak path "mkdir -p" untuk membuatnya, sesuatu seperti:
sumber
rsync -a tidak membuat direktori baru lebih dalam dari pada kedalaman 1, jadi rsync hanya solusi parsial dan misalnya tidak cocok untuk saya (saya googled untuk menemukan jawaban bagaimana rsync direktori ke beberapa hierarki jarak jauh ketika beberapa direktori hilang di tengah )
Sunting: Maksud saya, saya punya sumber dir: /home/user/projects/homework/1/1.1/ Dan saya ingin rsync ke remote: /home/user/projects/homework/1/1.1/ ... tapi tujuan belum memiliki direktori / home / user / proyek / pekerjaan rumah ... dan saya tidak ingin mentransfer subdirektori lain di mesin sumber yang ada di / home / user / proyek /
Sunting2: Menemukan jalan, dengan rsync - opsi relatif: Contoh di atas akan seperti ini:
cd / home / proyek /; rsync - PR rumah / 1 / 1.1 pengguna @ remote: / home / user / proyek /
sumber
Saya menyarankan yang berikut ini:
Omong-omong, cp dengan R flag menyalin file / folder secara rekursif.
sumber
membangun struktur direktori
/tmp/f2
untuk file dalam/tmp/f
salin file ke destincation baru
/tmp/f2/
sumber