我正在學習一個unix/linux類,我們還沒有學習變量或函數。我們只是學習了一些基本的工具,例如標誌和管道,輸出和追加到文件。在實驗室任務中,他希望我們找到最大的文件並將其複製到目錄。傳遞輸出作爲cash中的參數bash
我可以得到5頁最大的文件,但我不知道如何將它們傳遞到CP在一個命令
ls -SF | grep -v/| head -5 | cp ? Directory
我正在學習一個unix/linux類,我們還沒有學習變量或函數。我們只是學習了一些基本的工具,例如標誌和管道,輸出和追加到文件。在實驗室任務中,他希望我們找到最大的文件並將其複製到目錄。傳遞輸出作爲cash中的參數bash
我可以得到5頁最大的文件,但我不知道如何將它們傳遞到CP在一個命令
ls -SF | grep -v/| head -5 | cp ? Directory
這將是:
cp `ls -SF | grep -v/| head -5` Directory
假設管道是正確的。反引號代替行內命令的輸出。
您也可以讓你的測試:
cp `echo a b c` Directory
將複製所有a
,b
,並c
到Directory
。
我會做:
cp $(ls -SF | grep -v/| head -5) Directory
xargs的很可能是最好的答案,但。
ls -SF | grep -v/| head -5 | xargs -I{} cp "{}" Directory
使用反斜槓'like this`或美元符號$(如此)來執行命令替換。基本上,這將反向命令的每行標準輸出粘貼到周圍的命令中並運行它。在「命令替換」下找到更多信息。
另外,如果你想在一次讀取一行可以讀取各行出使用管道流「而改爲」語法:
ls | while read varname; do echo $varname; done
這正是我需要將窗口標識符列表(從'xwininfo'的輸出中刪除並剪切)到'xdotool'中,這樣我就可以關閉一堆彈出的錯誤對話框。此語法適用於zsh :) – Desty
如果您cp
有一個「-t」標誌(檢查手冊頁),它簡化了事情有點:
ls -SF | grep -v/| head -5 | xargs cp -t DIRECTORY
find命令爲您提供了更細粒度的能力得到你想要的東西,而不是ls | grep
你帶來了。我想編寫你的問題是這樣的:
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
我檢查了我的系統上的手冊頁(macOS 10.12.1),並且-t選項似乎不存在: '〜$ cp -t main.c main2.c cp :非法選項-t' –
我認爲-t是GNU選項,Mac不是GNU。 –
'男人xargs'是你的朋友? –
參見[如何通過'find'結果'cp'使得具有空格的文件名工作](HTTP ://stackoverflow.com/questions/18724826/how-to-pass-find-results-to-cp-such-that-file-names-with-spaces-work)。 – tripleee