test.txt
dosyasını bir komutla birden çok dizine kopyalamayı denedim:
cp ~/test.txt ~/folder1 ~/folder2
Ama başaramadım. Tek bir komutta bunu yapmanın bir yolu var mı? Böylece bir dosyayı veya bir klasörü birden çok dizine kopyalayabilirim?
test.txt
dosyasını bir komutla birden çok dizine kopyalamayı denedim:
cp ~/test.txt ~/folder1 ~/folder2
Ama başaramadım. Tek bir komutta bunu yapmanın bir yolu var mı? Böylece bir dosyayı veya bir klasörü birden çok dizine kopyalayabilirim?
cp
, birden çok kaynaktan kopyalanabilir, ancak birden fazla hedefe kopyalayamaz . Daha fazla bilgi için man cp
bölümüne bakın.
Birden çok hedefe kopyalayabilen / kaydedebilen tek bash komutu tee
.
Durumunuzda aşağıdaki gibi kullanabilirsiniz:
tee ~/folder1/test.txt ~/folder2/test.txt < ~/test.txt
tee
öğesinin de girişi standart çıktıya (stdout) yazdığını unutmayın. Bunu istemiyorsanız, standart çıktıyı aşağıdaki gibi /dev/null
'ye yönlendirerek engelleyebilirsiniz:
tee ~/folder1/test.txt ~/folder2/test.txt < ~/test.txt >/dev/null
Birden çok konuma kopyalamanın başka bir yolu aşağıdaki komuttur:
find dir1 dir2 -exec cp file.txt {} \;
dir1 veya dir2, dosyanın kopyalanmasını istemediğiniz alt dizinlere sahipse, ekleyin
-maxdepth 0
seçeneği:
find dir1 dir2 -maxdepth 0 -exec cp file.txt {} \;
Bunun, kopyalamaya ek olarak, dir1
ve dir2
dizinindeki file.txt
'sindeki tüm dosyaların üzerine yazılacağını unutmayın. Bu dizinlerdeki diğer dosyaları etkilemeden yalnızca file.txt
kopyasını kopyalamak için find
öğesinin yalnızca dizinlerde işlem yapmasını söyleyin:
find dir1 dir2 -type d -exec cp file.txt {} \;
Komut
cp ~/test.txt ~/folder1 ~/folder2
, iki dosyayı ( ~/test.txt
ve ~/folder1
) hedef folder2
kopyalamaya çalışır. (% Co_de% var ise ve bir dizin ise "atlatma dizini" uyarısı alacaksınız.
~/folder2
dosyasının birden çok kopyasını yapmak istiyorsanız, bir döngü veya çoklu komut kullanmanız gerekir ...
for i in ~/folder1 ~/folder2; do cp ~/test.txt $i; done
(... ve dosya adlarına yerleştirilmiş boşluklarınız varsa dikkatli olun, alıntı yapmanız gerekir).
Tüm dizinleri kopyalamak için test.txt
seçeneğini kullanmalısınız:
for i in ~/folder1 ~/folder2; do cp -r ~/folder3 $i; done
Bu, dahil edilen tüm dosyalar ile -r
ve ~/folder1/folder3
oluşturur.
Bir yardım komut dosyası oluşturabilir veya bunu xargs
ve bir baskı işleviyle yapabilirsiniz (bu durumda, echo
):
echo firstDir secondDir | xargs -n 1 cp test
Bu, her dizini test dosyasını parametre olarak kullanarak cp
işlevine bir argüman oluşturacaktır.
Uzun bir aramanın ardından bu bir Çekicilik gibi çalışır!
for dir in *; do [ -d "$dir" ] && cp /path/file.txt "$dir" ; done
Bu, file.txt adresini geçerli konumunuzdaki terminaldeki her dizine kopyalayacaktır.
for dir in *; do [ -d "$dir" ] && cp -rf /path/folder "$dir" ; done
Bu, geçerli konumunuzdaki terminaldeki her bir alt dizine bir klasör kopyalayacaktır.
Paylaşıyorum umarım başkalarına da yardım eder.
Test.txt dosyasını / tmp / target / ... dizinindeki her dizine kopyalamak isterseniz ...
bir test ortamı oluşturun:
mkdir /tmp/target
cd /tmp/target
mkdir -v {folder1,folder2,folder3}
touch test.txt
kopyala:
find * -maxdepth 0 -type d -exec cp -vi test.txt {} \;
Sadece Sylvain Pineau
dir1
ve dir2
geçerli dizininizde değil.
find ./ -maxdepth 2 -type d -name dir1 -exec cp file.txt {} \;
buradaki dir1
iki seviyesini bulacağınızı veya -maxdepth
parametresini dir1
dizinini bulmak için şu anki dizinde ve altındaki tüm klasörler içinde bulabilirsiniz.
Etiketlerdeki diğer soruları oku command-line cp