ini tidak berfungsi jika sub / tidak kosong -> sub akan disalin ke sub lagi, kecuali kalau itu yang diinginkan oleh @Oguz.
Ok saya akhirnya puas dengan findkode: D
Lekensteyn
2
Perintah kedua Anda gagal untuk nama file yang menyertakan spasi. Gunakan xargsatau -exec. Tidak perlu untuk grepdigunakan ! -name "$TARGETDIR"atau serupa. Anda memiliki penawaran yang tidak cocok di sekitar $file. Saya tidak berpikir rekursif cpakan bekerja seperti yang Anda inginkan kecuali perintah pertama Anda.
Dijeda sampai pemberitahuan lebih lanjut.
Wohaa, melewatkan kutipan dalam kode terakhir. Komentar yang bagus Dennis, saya tidak pernah berpikir untuk menggunakan -nama dalam kasus ini :)
Lekensteyn
4
Misalkan targetadalah nama subdirektori target, jika shell Anda adalah bash:
shopt -s extglob
cp -r !(target) target/
Di ksh, Anda bisa langsung melakukannya cp -r !(target) target/.
Dalam zsh, Anda dapat melakukan setopt ksh_globitu cp -r !(target) target/. Kemungkinan lain adalah setopt extended_globkemudian cp -r ^target target/.
Saya akan menyarankan memindahkan direktori target di luar direktori sumber dan kemudian memasukkannya kembali; mv adalah gratis (jika Anda berhati-hati untuk tidak pindah ke sistem file yang berbeda), kecuali jika Anda mengharapkan proses lain untuk mengganggu / terganggu.
Sebagian besar solusi yang diposting di atas tidak akan berfungsi jika ada spasi dalam nama file. Saya akan menyarankan menggunakan varian find -print0 | xargs -0, atau temukan -exec, dll.
Tidak ada kebutuhan untuk ls: for file in *. Tidak perlu untuk backticks - gunakan $(). Tidak perlu untuk backticks (atau $()) di sekitar cpperintah (yang akan menghasilkan pesan kesalahan).
Jawaban:
Jika Anda ingin menyalin konten folder secara rekursif (akan menimbulkan 1 kesalahan, alternatif di bawah):
Sedikit lebih meretas, tetapi bekerja pada subdirektori tidak kosong:
Oneliner lain:
Atau rekursif:
sumber
find
kode: Dxargs
atau-exec
. Tidak perlu untukgrep
digunakan! -name "$TARGETDIR"
atau serupa. Anda memiliki penawaran yang tidak cocok di sekitar$file
. Saya tidak berpikir rekursifcp
akan bekerja seperti yang Anda inginkan kecuali perintah pertama Anda.Misalkan
target
adalah nama subdirektori target, jika shell Anda adalah bash:Di ksh, Anda bisa langsung melakukannya
cp -r !(target) target/
.Dalam zsh, Anda dapat melakukan
setopt ksh_glob
itucp -r !(target) target/
. Kemungkinan lain adalahsetopt extended_glob
kemudiancp -r ^target target/
.sumber
Saya akan menyarankan memindahkan direktori target di luar direktori sumber dan kemudian memasukkannya kembali; mv adalah gratis (jika Anda berhati-hati untuk tidak pindah ke sistem file yang berbeda), kecuali jika Anda mengharapkan proses lain untuk mengganggu / terganggu.
Sebagian besar solusi yang diposting di atas tidak akan berfungsi jika ada spasi dalam nama file. Saya akan menyarankan menggunakan varian find -print0 | xargs -0, atau temukan -exec, dll.
sumber
Apakah ini akan berhasil untuk Anda?
Jika Anda bermaksud memindahkan alih-alih menyalin segala sesuatu di direktori saat ini ke subdirektori, Anda dapat melakukan:
sumber
Ini akan menyalin semuanya, termasuk file dot, dan tidak termasuk direktori target itu sendiri, ke direktori target
SUBDIR
:sumber
Ini berlaku sebagai file dirCopy.sh
jalankan sebagai "sh dirCopy.sh" di konsol Anda
sumber
ls
:for file in *
. Tidak perlu untuk backticks - gunakan$()
. Tidak perlu untuk backticks (atau$()
) di sekitarcp
perintah (yang akan menghasilkan pesan kesalahan).