所以我正在做一個C程序,模擬shell中的管道命令,但我很困惑它。我知道它在我的目錄中搜索一些東西,對它進行排序並將其廣告給一個file.txt,但我不知道它搜索的是什麼。由shell管道命令迷茫
find . -type f -ls | cut -c 2- | sort -n -k 7 >file.txt ; less <file.txt
有人能告訴我它是幹什麼的嗎?
所以我正在做一個C程序,模擬shell中的管道命令,但我很困惑它。我知道它在我的目錄中搜索一些東西,對它進行排序並將其廣告給一個file.txt,但我不知道它搜索的是什麼。由shell管道命令迷茫
find . -type f -ls | cut -c 2- | sort -n -k 7 >file.txt ; less <file.txt
有人能告訴我它是幹什麼的嗎?
find . -type f -ls | cut -c 2- | sort -n -k 7 >file.txt ; less <file.txt
這是一個非常奇怪的命令。你確定你已經正確複製了嗎?它從哪裏來的?
我建議打破命令,通過less
管道部分版本的輸出,所以你可以看到發生了什麼。 (當然,你應該閱讀所有相關手冊頁,如果你還沒有。)
find . | less
find . -type f | less
find . -type f -ls | less
find . -type f -ls | cut -c 2- | less
...
或者使用head
而不是less
,所以你可以看到輸出的前幾行。
find . -type f
遞歸查找當前目錄下的所有普通文件('.'
)。 -ls
選項告訴它爲每個文件顯示一行,其格式與ls -l
生成的格式類似。
find ... -ls
的輸出以數字inode編號開始。這個數字可能會用前導空格打印。
cut -c 2-
刪除less
輸出各行的前兩個字符。我不知道你爲什麼想這樣做。我懷疑這個想法是爲了確保在行首處沒有空格,但這不是一個可靠的方法。如果inode數量恰好足夠小,則可能有三個或更多前導空格。這可能會更好,因爲sed 's/^ *//'
- 但它甚至沒有必要。
sort -n -k 7
在第7個空格分隔的字段上進行數字排序,這恰好是文件的字節大小。所以這是按照文件大小從最小到最大排列列表。我猜,以前的cut
命令旨在確保即使原始行以空格開始,大小仍是第7個字段,但這不是必需的(除非可能對sort
版本的行爲有點不同)。
輸出寫入file.txt
,然後使用less <file.txt
查看。 <
很愚蠢; less
完全能夠從其命令行上命名的文件讀取,因此less file.txt
可以工作。顯然,用戶想要保存輸出;否則將sort
的輸出輸出到less
會更有意義。 tee
命令在這裏也可能有用:find ... | tee file.txt | less
。
find ... -ls
的輸出,如ls -l
的輸出,意味着是人類可讀的;它的而不是用於自動文本處理。從一個實現到另一個實現可能會有所不同。有辦法產生更多的經常產出。如果您有GNU find
,則它有一個-printf
選項,可讓您指定,確切地說它打印的信息以及順序。
我從老師給我的練習中複製而來。哇,非常感謝你的這個信息。這將有助於很多 – Ackerman
人發現
人砍
人排序
人少
find . -type f
搜索在當前目錄中的常規文件(.
意味着當前迪rectory)或任何子目錄,並且-ls
只是以與ls
相同的格式打印結果。 cut -c 2-
從find
的輸出中刪除2個第一個字符,然後對其進行數字排序並輸入到一個文件中,然後使用less
讀取該文件。 唷
非常感謝! – Ackerman
'man find'會顯示它搜索...常規文件。 –
搜索常規文件並壓縮前兩個字符(?),然後將其排序並將輸出寫入file.txt。也許你的find版本不能像我一樣工作(解釋cut命令)。 –