Command-Line
按同名包含文件的最後修改日期/時間對目錄進行排序
是否可以使用
grep
,find
等按同名文件(例如file.php
)的最後修改日期對目錄列表進行排序?例如:domain1/file.php (last modified 20-Jan-2014 00:00) domain2/file.php (last modified 22-Jan-2014 00:00) domain3/file.php (last modified 24-Jan-2014 00:00) domain4/file.php (last modified 23-Jan-2014 00:00)
每個目錄具有相同的文件名(例如,
file.php
)。結果應該是:
domain3/ (last modified 24-Jan-2014 00:00) domain4/ (last modified 23-Jan-2014 00:00) domain2/ (last modified 22-Jan-2014 00:00) domain1/ (last modified 21-Jan-2014 00:00)
正如 Vivian 建議的那樣,該
-t
選項ls
告訴它按修改時間對文件進行排序(預設情況下,最新的在前;如果添加則反轉-r
)。這是最常用的(至少在我的經驗中)對目錄中的文件進行排序,但它也可以應用於命令行上的文件列表。萬用字元(“globs”)在命令行上生成文件列表。所以,如果你說ls -t */file.php
它會列出
domain3/file.php domain4/file.php domain2/file.php domain1/file.php
但是,如果您添加
-1
(破折號)選項,或者將其通過管道傳輸到任何內容中,它將每行列出一個。所以你想要的命令是ls -t */file.php | sed 's|/file.php||'
這是 中的普通 替換,但用作分隔符,因為包含 a ,並且帶有一個空的。(即,它會從輸出中刪除文件名及其之前的文件名 — — 。)當然,如果您想要目錄名稱的結尾,只需執行or .
s/*old_string*/*replacement_string*/``sed``|
old_string
/
replacement_string
/``/file.php``ls``/``sed 's|file.php||'``sed 's/file.php//'
如果需要,添加
-l
(小寫 L)選項以ls
獲取長列表,包括修改日期/時間。然後您可能想要增強sed
命令以去除不相關的資訊(例如文件的模式、所有者和大小),並且如果您願意,可以將日期/時間移到目錄名稱之後。這將查看目前目錄中的目錄,並且僅查看它們。(這似乎是問題所要求的。)對其他目錄進行單級掃描是一個微不足道的變化:
ls -t /path/to/tld/*/file.php | sed 's|/file.php||'
(遞歸地)搜尋目前目錄(或其他頂級目錄)下的整個目錄樹有點棘手。輸入命令
shopt -s globstar
然後將
*
上述命令之一中的星號 ( ) 替換為兩個星號 (**
),例如,ls -t **/file.php | sed 's|/file.php||'