Bagaimana saya bisa menggunakan terminal Linux untuk menyalin semua yang ada di direktori saat ini ke subdirektori?
Bagaimana saya bisa menggunakan terminal Linux untuk menyalin semua yang ada di direktori saat ini ke subdirektori?
Jawaban:
Jika Anda ingin menyalin konten folder secara rekursif (akan menimbulkan 1 kesalahan, alternatif di bawah):
cp -r * sub/
Sedikit lebih meretas, tetapi bekerja pada subdirektori tidak kosong:
TARGETDIR='targetdir here';cp -r `find . -maxdepth 1 ! -name "$TARGETDIR"` "$TARGETDIR"
Oneliner lain:
TARGETDIR='targetdir here';for file in *;do test "$file" != "$TARGETDIR" && cp "$file" "$TARGETDIR/";done
Atau rekursif:
TARGETDIR='z';for file in *;do test "$file" != "$TARGETDIR" && cp -r "$file" "$TARGETDIR/";done
find
kode: D
xargs
atau -exec
. Tidak perlu untuk grep
digunakan ! -name "$TARGETDIR"
atau serupa. Anda memiliki penawaran yang tidak cocok di sekitar $file
. Saya tidak berpikir rekursif cp
akan bekerja seperti yang Anda inginkan kecuali perintah pertama Anda.
Misalkan target
adalah 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_glob
itu cp -r !(target) target/
. Kemungkinan lain adalah setopt extended_glob
kemudian 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.
Apakah ini akan berhasil untuk Anda?
cp -r * subdir/
Jika Anda bermaksud memindahkan alih-alih menyalin segala sesuatu di direktori saat ini ke subdirektori, Anda dapat melakukan:
mv * subdir/
Ini akan menyalin semuanya, termasuk file dot, dan tidak termasuk direktori target itu sendiri, ke direktori target SUBDIR
:
for i in `ls -a | grep -Ev '^(SUBDIR|\.\.?)$'`; do cp $i SUBDIR; done
Ini berlaku sebagai file dirCopy.sh
for i in `ls`
do
if [ $i != "subDir" ]
then
`cp -r $i subDir`
fi
done
jalankan sebagai "sh dirCopy.sh" di konsol Anda
ls
: for file in *
. Tidak perlu untuk backticks - gunakan $()
. Tidak perlu untuk backticks (atau $()
) di sekitar cp
perintah (yang akan menghasilkan pesan kesalahan).