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)
답변1
Vivian이 제안한 것처럼 -t
옵션은 ls
수정 시간을 기준으로 파일을 정렬하도록 지시합니다(기본적으로 가장 최근 항목이 먼저, 추가된 경우 그 반대 -r
). 이것은 (적어도 내 경험으로는) 디렉토리의 파일을 정렬하는 데 가장 일반적으로 사용되지만 명령줄의 파일 목록에도 적용할 수 있습니다. 와일드카드("glob")는 명령줄에 파일 목록을 생성합니다. 그래서 당신이 말한다면
ls -t */file.php
그것은 나열됩니다
domain3/file.php domain4/file.php domain2/file.php domain1/file.php
그러나 -1
(대시 1) 옵션을 추가하거나 다른 항목에 연결하면 한 줄에 하나씩 나열됩니다. 그래서 당신이 원하는 명령은
ls -t */file.php | sed 's|/file.php||'
이것은 일반적인 대체품이지만 구분 기호로 사용됩니다.s/old_string/replacement_string/
sed
|
old_string
/
비어 있는 a가 포함되어 있습니다 .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||'
답변2
네, 가능합니다.
그러면 지난 60분 동안 수정된 파일이 제공됩니다.
$ find /domain -type f -mmin -60
또는 수정 시간별로 정렬된 파일을 제공합니다.
$ find /domain -type f -printf '%TY-%Tm-%Td %TT %p\n' | sort -r
편집 #1
파일 확장자가 ".php"인 경우 다음을 추가하세요.
-name '*.php'
내가 찾은이것확인해 보시면 좋을 것 같습니다.
편집 #2
음, 마지막 편집으로 인해 상황이 좀 더 어려워졌습니다. 하지만 마지막으로 수정된 디렉토리를 사용할 수 있습니다 ls -t
. 시간별로 정렬하려면 ls -clRt
이를 사용할 수 있으며 그 후에 파일을 검사할 수 있지만 특정 명령을 사용하여 원하는 것이 무엇인지 잘 모르겠습니다. 유사한 스크립트(Bash 또는 Perl)를 사용하여 가능합니다.
답변3
답변4
그리고 zsh
:
setopt extendedglob
print -rl -- **/file.php(.om:h)
.om
선택한 파일을 정렬 mtime
하고 :h
후행 경로 부분을 제거합니다. s도
나열하려면 mtime
다음을 사용할 수 있습니다 zstat
.
zmodload zsh/stat
for f (**/file.php(.om))
printf '%s %s\t%s\n' $(zstat -F '%d-%b-%Y %T' +mtime -- $f) ${f:h}