對於這樣的命令,Linux的命令行合併文件
ls -rt | tail -n 100
會給最新修改的100個文件。應該使用什麼命令行工具來管理此查詢的結果,以便將所有顯示的文件名複製到單個文件中。例如:
如果一個文件夾有100個文件,上面的命令會給我所有的文件名。我想將所有文件中的所有數據複製到單個第101個文件中。我該怎麼做?
命令行到cat
到目的地的每個文件都是我正在尋找的。但我不知道從哪裏開始。
對於這樣的命令,Linux的命令行合併文件
ls -rt | tail -n 100
會給最新修改的100個文件。應該使用什麼命令行工具來管理此查詢的結果,以便將所有顯示的文件名複製到單個文件中。例如:
如果一個文件夾有100個文件,上面的命令會給我所有的文件名。我想將所有文件中的所有數據複製到單個第101個文件中。我該怎麼做?
命令行到cat
到目的地的每個文件都是我正在尋找的。但我不知道從哪裏開始。
ls -rt | tail -n 100 | xargs cat > file
的xargs
命令從它的標準輸入流反覆讀取文本,構建使用該文本的命令行,然後執行該命令行。
xags cat
意味着它把輸入的文本作爲單獨的參數的每一行,並且使用每個輸入行作爲一個參數傳遞給cat
命令構造一個cat
命令。它將盡可能長地構建命令行,因此它將分叉至少一個cat
進程。
因此,cat
進程會讀取您感興趣的文件,並將其內容按順序寫入標準輸出流。
> file
把文本到結果文件
我發現這很簡單:
cat `ls -rt | tail -n 100` > singleFile
如果您有空格的文件名,我會建議使用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
。
請注意,如果文件名中有換行符,則不起作用。
打破文件名與他們中的空格等 – tripleee
沒有空格的文件名.. –