Saya memiliki dua pohon direktori dengan tata letak yang sama, yaitu
.
|-- dir1
| |-- a
| | |-- file1.txt
| | `-- file2.txt
| |-- b
| | `-- file3.txt
| `-- c
| `-- file4.txt
`-- dir2
|-- a
| |-- file5.txt
| `-- file6.txt
|-- b
| |-- file7.txt
| `-- file8.txt
`-- c
|-- file10.txt
`-- file9.txt
Saya ingin menggabungkan pohon direktori dir1 dan dir2 untuk membuat:
merged/
|-- a
| |-- file1.txt
| |-- file2.txt
| |-- file5.txt
| `-- file6.txt
|-- b
| |-- file3.txt
| |-- file7.txt
| `-- file8.txt
`-- c
|-- file10.txt
|-- file4.txt
`-- file9.txt
Saya tahu bahwa saya dapat melakukan ini menggunakan perintah "cp", tetapi saya ingin memindahkan file daripada menyalin, karena direktori aktual yang ingin saya gabungkan sangat besar dan berisi banyak file (jutaan). Jika saya menggunakan "mv" saya mendapatkan kesalahan "File exist" karena nama direktori yang saling bertentangan.
PEMBARUAN: Anda dapat berasumsi bahwa tidak ada file duplikat antara dua pohon direktori.
Jawaban:
Ini akan membuat hardlink daripada memindahkannya, Anda dapat memverifikasi bahwa mereka dipindahkan dengan benar, lalu, hapus
dir1/
dandir2/
.sumber
--link-dest
jalur absolut, atau relatif terhadapmerged/
; atau itu akan menyalin.Sangat aneh tidak ada yang mencatat bahwa
cp
memiliki opsi-l
:Anda dapat melakukan sesuatu seperti
sumber
cp -l
tidak bekerja di seluruh sistem file.cp -a
(sinonim dengancp -RPp
) untuk menjaga semua atribut file dan menghindari symlink berikut: di sini perintah menjadicp -al dir1/* dir2/* merge
.Anda dapat menggunakan rename (alias nama samaran, dari paket perl) untuk itu. Berhati-hatilah bahwa nama tersebut tidak merujuk pada perintah yang saya jelaskan di luar debian / ubuntu (meskipun itu file perl portabel tunggal jika Anda memerlukannya).
Anda juga memiliki opsi untuk menggunakan vidir (dari moreutils), dan mengedit jalur file dari editor teks pilihan Anda.
sumber
Aku seperti rsync dan prename solusi, tetapi jika Anda benar-benar ingin membuat mv melakukan pekerjaan dan
-print0
dan-depth
,-0
,maka dimungkinkan untuk menangani sejumlah besar file yang mungkin memiliki spasi kosong acak dalam namanya, semua dengan skrip shell Bourne-style:
sumber
find . -name '*.torrent' | xargs -d '\n' rm
Paksaan
bash
Tes melakukan ini
sumber
Saya harus melakukan ini beberapa kali untuk pohon kode sumber pada berbagai tahap pengembangan. Solusi saya adalah menggunakan Git dengan cara berikut:
Anda dapat membuatnya dengan bercabang dan sebagainya, tetapi ini adalah ide umum. Dan Anda memiliki lebih sedikit rasa takut untuk memasukkannya karena Anda memiliki snapshot lengkap dari setiap negara.
sumber