2012-09-06 87 views
1

對於這樣的命令,Linux的命令行合併文件

ls -rt | tail -n 100 

會給最新修改的100個文件。應該使用什麼命令行工具來管理此查詢的結果,以便將所有顯示的文件名複製到單個文件中。例如:

如果一個文件夾有100個文件,上面的命令會給我所有的文件名。我想將所有文件中的所有數據複製到單個第101個文件中。我該怎麼做?

命令行到cat到目的地的每個文件都是我正在尋找的。但我不知道從哪裏開始。

回答

4

ls -rt | tail -n 100 | xargs cat > file

  1. xargs命令從它的標準輸入流反覆讀取文本,構建使用該文本的命令行,然後執行該命令行。

  2. xags cat意味着它把輸入的文本作爲單獨的參數的每一行,並且使用每個輸入行作爲一個參數傳遞給cat命令構造一個cat命令。它將盡可能長地構建命令行,因此它將分叉至少一個cat進程。

  3. 因此,cat進程會讀取您感興趣的文件,並將其內容按順序寫入標準輸出流。

  4. > file把文本到結果文件

2

我發現這很簡單:

cat `ls -rt | tail -n 100` > singleFile 
+0

打破文件名與他們中的空格等 – tripleee

+1

沒有空格的文件名.. –

1

如果您有空格的文件名,我會建議使用GNU發現:

find . -maxdepth 1 -type f -printf '%Ts %p\n' \ 
| sort -nr  \ 
| head -n100  \ 
| cut -d' ' -f2- \ 
| tr '\n' '\0' \ 
| xargs -0 cat > outfile 

printf參數爲find個插入上次修改時間(秒)在路徑名中,這sort降序排序,head採取第一100個文件的前面,cut刪除修改時間戳,tr零限定了文件列表和xargs正確傳遞的文件名cat

請注意,如果文件名中有換行符,則不起作用。