Apakah ada cara mudah untuk menyalin semua file tersembunyi secara rekursif ke direktori lain? Saya ingin mencadangkan semua file pengaturan di direktori home, bukan file normal. Saya mencoba:
cp -R .* directory
tetapi juga mengenali .
dan ..
menyalin semua file yang tidak tersembunyi secara rekursif. Apakah ada cara agar cp diabaikan .
dan ..
?
-r
dan-R
?Jawaban:
Favorit saya untuk memindahkan dir secara umum adalah:
yang memecah direktori saat ini ke stdout kemudian pipa ke subshell yang pertama cd ke direktori tujuan sebelum menghapus stdin. Sederhana, langsung, dapat diperpanjang - pertimbangkan apa yang terjadi ketika Anda mengganti () dengan ssh ke komputer lain. Atau untuk menjawab pertanyaan Anda, Anda mungkin melakukan:
sumber
cd /dest/dir && tar xvf -
. Ini&&
akan menghentikan Anda dari menabrak direktori sumber jika Anda memiliki kesalahan ketik di tujuan. 2) Anda hanya perluv
flag tar pada salah satu perintah tar (atau tidak).(cd /src/dir && tar cf - .) | tar xvf -
Hampir setiap kali ini bisa diselesaikan hanya dengan:
Sangat tidak biasa memiliki file tersembunyi yang tidak dimulai dengan salah satu karakter tersebut.
Pencocokan pola lain tersedia (
.??*
,.[^.]*
) - lihat komentarsumber
Anda bisa menggunakannya
rsync
.yang akan menyalin isi direktori saat ini (termasuk file dot, tetapi tidak termasuk
..
)sumber
.git
dir. Menambahkan -C melakukan ini dan perintahnya menjadi:rsync -aC ./ /some/other/directory/
Saya mohon Anda, menjauhlah dari ekspansi shell biasa pada
cp
baris perintah - ekspansi shell memiliki segala macam kasus sudut "menarik" ahem (rekursi yang tidak diinginkan yang disebabkan oleh. Dan .., spasi, hal-hal yang tidak dapat dicetak, hardlink, tautan simbolik, dan seterusnya.) Gunakanfind
saja (ini ada dalamfindutils
paket, jika Anda belum menginstalnya - yang akan aneh, semua distribusi menginstalnya secara default):Penjelasan langkah demi langkah:
Jadi, dalam bahasa Inggris yang sederhana,
find
baris perintah ini mengatakan ini:sumber
Saya selalu menggunakan. ?? * untuk menemukan file tersembunyi tanpa mendapatkan "." dan "..". Mungkin melewatkan ".a" atau sesuatu, tetapi saya tidak pernah memilikinya.
sumber
Jawaban yang jauh lebih baik di sini; /superuser/61611/how-to-copy-with-cp-to-include-hidden-files-and-hidden-directories-and-their-con
Ini menjelaskan misalnya menggunakan shopt untuk solusi bash asli
sumber