Geçerli dizindeki her şeyi bir alt dizine kopyalamak için Linux terminalini nasıl kullanabilirim?
Geçerli dizindeki her şeyi bir alt dizine kopyalamak için Linux terminalini nasıl kullanabilirim?
Yanıtlar:
Klasörün içeriğini özyinelemeli olarak kopyalamak istiyorsanız (1 hata atar, aşağıdaki alternatifler):
cp -r * sub/
Biraz daha hacky, ama boş olmayan alt dizinlerde çalışır:
TARGETDIR='targetdir here';cp -r `find . -maxdepth 1 ! -name "$TARGETDIR"` "$TARGETDIR"
Başka bir oneliner:
TARGETDIR='targetdir here';for file in *;do test "$file" != "$TARGETDIR" && cp "$file" "$TARGETDIR/";done
Veya özyinelemeli:
TARGETDIR='z';for file in *;do test "$file" != "$TARGETDIR" && cp -r "$file" "$TARGETDIR/";done
find
koddan memnunum : D
xargs
Veya tuşunu kullanın -exec
. grep
Kullanıma ! -name "$TARGETDIR"
veya benzeri bir şeye gerek yoktur . Etrafınızda eşsiz tırnak işaretleri var $file
. Bir özyinelemenin cp
, ilk emrinizden başka herhangi bir niyetinde çalışacağını düşünmüyorum.
Diyelim target
ki kabuğunuz bash ise, hedef alt dizinin adıdır:
shopt -s extglob
cp -r !(target) target/
Ksh olarak, doğrudan yapabilirsiniz cp -r !(target) target/
.
Zsh, sen yapabilirsin setopt ksh_glob
sonra cp -r !(target) target/
. Başka bir olasılık o setopt extended_glob
zaman cp -r ^target target/
.
Hedef dizini kaynak dizinin dışına taşımayı ve sonra tekrar koymayı öneririm; mv ücretsizdir (farklı bir dosya sistemine geçmemeye dikkat ediyorsanız), diğer işlemlerin karışmasını / etkilenmesini beklemiyorsanız.
Dosya adlarında boşluk varsa, yukarıda yayınlanan çözümlerin çoğu çalışmaz. Find -print0 varyantlarını kullanmanızı öneririm | xargs -0 veya -exec vb. bulun.
Bu senin için işe yarayacak mı?
cp -r * subdir/
Geçerli dizindeki her şeyi bir alt dizine kopyalamak yerine taşımak istiyorsanız, şunları yapabilirsiniz:
mv * subdir/
Bu, hedef dizinin kendisini içermeyen nokta dosyaları da dahil olmak üzere her şeyi hedef dizine kopyalar SUBDIR
:
for i in `ls -a | grep -Ev '^(SUBDIR|\.\.?)$'`; do cp $i SUBDIR; done
Diyelim ki dirCopy.sh dosyası
for i in `ls`
do
if [ $i != "subDir" ]
then
`cp -r $i subDir`
fi
done
konsolunuzda "sh dirCopy.sh" olarak çalıştırın
ls
: for file in *
. İğneye gerek yok - kullanın $()
. Komutun $()
çevresinde geri (veya ) işaretlere gerek yoktur cp
(bu bir hata mesajı oluşturur).