2011-07-26 14 views
22

için cp için bir argüman olarak geçiyor unix/linux sınıfı alıyorum ve henüz değişkenleri veya işlevleri öğrenmedik. Bayrak ve boru hattı gibi bazı temel araçları öğrendik, çıktı aldık ve dosyaya ekledik. Laboratuvar görevinde en büyük dosyaları bulup bir dizine kopyalamamızı istiyor.bas çıkışı

Ben 5 büyük dosyaları elde edebilirsiniz ama bu olurdu tek bir komut

ls -SF | grep -v/| head -5 | cp ? Directory 
+6

'adam ... –

+0

Ayrıca bakınız (http [Nasıl boşluklarla dosya adları çalışmak şekilde cp'' 'için find' sonuçları geçmek] : //stackoverflow.com/questions/18724826/how-to-pass-find-results-to-cp-such-that-file-names-with-spaces-work). – tripleee

cevap

46

yılında cp içine geçmesine nasıl bilmiyorum:

cp `ls -SF | grep -v/| head -5` Directory 

boru hattının doğru olduğunu varsayarak . Backticks, içindeki komutların çıktısını satırın yerine koyar.

Ayrıca testler yapabilir:

cp `echo a b c` Directory 

tüm a, b ve cDirectory içine kopyalar.

25

yapardım:

cp $(ls -SF | grep -v/| head -5) Directory 

Xargs muhtemelen olsa iyi cevabı olacaktır.

ls -SF | grep -v/| head -5 | xargs -I{} cp "{}" Directory 
5

Komut ikamesini gerçekleştirmek için bu gibi 'backticks' veya dolar işareti $ (bunun gibi) kullanın. Temel olarak bu, backticked komutunun standart satırlarının her birini çevreleyen komuta yapıştırır ve çalıştırır. "Komuta İkamesi" altındaki bash manpage'de daha fazlasını öğrenin. Bir kerede bir satır okumak istiyorsanız sözdizimi "okurken"

Ayrıca, kullandığınız bir boru akışının dışında bireysel hat okuyabilir: Eğer

ls | while read varname; do echo $varname; done 
+0

Tam olarak, pencere kimliklerinin bir listesini (xwininfo'nun çıktısından koparıp kesildi) xdotool'e aktarmak için gerekli olan şey bu yüzden bir sürü hata diyaloğunu kapatabilirdi. Bu sözdizimi zsh :) – Desty

0

senin cp bir "-t" bayrağı vardır (man sayfasına bakın), bu konularda bir an önce biraz kolaylaştırır:

ls -SF | grep -v/| head -5 | xargs cp -t DIRECTORY 

bulmak komutu size istediğini elde yerine sahip olduğunuz ls | grep daha ince taneli yeteneği verir. Böyle sorunuzu kod ediyorum: senin arkadaşın xargs`

find . -maxdepth 1 -type f -printf "%p\t%s\n" | 
sort -t $'\t' -k2 -nr | 
head -n 5 | 
cut -f 1 | 
xargs echo cp -t DIRECTORY 
+0

ile çalışır. Sistemdeki man sayfasını (macOS 10.12.1) kontrol ettim ve -t seçeneği görünmüyor: '~ $ cp -t main.c main2.c cp : Geçersiz seçenek - t' –

+1

-t bence bir GNU seçeneği ve Mac GNU değil. –