마지막으로 수정 한 날짜를 기준으로 디렉토리의 파일을 재귀 적으로 정렬


11

마지막으로 수정 한 날짜를 기준으로 디렉토리의 파일을 재귀 적으로 정렬

내 디렉토리에서 많은 파일을 수정했으며 마지막 수정 날짜별로 파일을 정렬하여 해당 파일이 무엇인지 알고 싶어하며 확장명 중 일부를 제외하고 싶습니다.

svn 디렉토리에는 정렬에 표시하고 싶지 않은 많은 .svn 파일이 있습니다.


내 답변에서 확장을 제외하는 방법을 시연합니다.
mikeserv

답변:


18
find -printf "%TY-%Tm-%Td %TT %p\n" | sort -n

당신에게 뭔가를 줄 것입니다

2014-03-31 04 : 10 : 54.8596422640 ./foo
2014-04-01 01 : 02 : 11.9635521720 ./ 바


폴더에서 파일 확장자를 제외 할 수 있습니까? ...
Danny

@Danny 예, 찾기가 쉽습니다 find -not -iname '*.ext'..
n.st

찾기 -not -path " svn "-not -name "* svn"-printf "% TY- % Tm- % Td % TT % p \ n"| 정렬 -n 이것은 내가 @ n.st 덕분에 정확히 필요한 것입니다
Danny

5

디렉토리 구조를 평평하게하려면 (따라서 파일이있는 디렉토리를 무시하고 모든 디렉토리의 모든 파일을 날짜별로 정렬) find@yeti가 제안한 -approach를 사용하는 방법입니다. 디렉토리 구조를 유지하려면 시도해보십시오

$ ls -ltR /path/to/directory

디렉토리를 기준으로 정렬합니다.


1
필요한 폴더가 모두 함께있는 폴더를 제공합니다. 최근 수정 된 파일은 무엇입니까
Danny

5

bash에서 shopt -s globstar먼저 실행하십시오 . ksh93에서 set -o globstar먼저 실행하십시오 . zsh에서는 이미 설정되어 있습니다.

ls -dltr **/*

시스템에서 명령 행 길이 제한을 초과하는 파일이 너무 많으면 오류가 리턴됩니다. zsh에서는이를 대신 사용할 수 있습니다.

print -rl -- **/*(Om)

이것이 솔라리스 10에서 작동하는 유일한 답변입니다. 감사합니다! :)
laxxy

3

GNU 찾기를 usuig한다고 가정하면 다음을 시도하십시오.

find $SOMEPATH -exec stat -c '%Y %n' '{}' + | sort -n

1
find-printf옵션을 사용 하여 별도의 프로세스 (또는 파일 수에 따라 여러 개)를 호출하지 않도록 할 수 있습니다 . 예를 들어 내 대답 을 참조하십시오 .
n.st

1
그것을 할 수있는 다른 방법이 있다는 것을 알고, 내가 원했던 제공하는 stat기회 쇼를 -exec ... +. 정말! 때때로 나는 stat더 많은주의를 기울일 필요가 있다고 생각한다 . 그리고 아무도 재료에 대해 읽고 결과에 대해 생각하지 않고 여기서 레시피를

BTW 없습니다 ... 모든 발견은이 -printf...

1
@yeti - 당신의 경우 find가 없습니다 -printf, 당신이 사용할 수있는 -exec sh -c 'printf...'거의 같은 기능을 얻을 수 있습니다. 여기에는 $(pwd)정규화 된 경로 에 대한 액세스도 포함됩니다 .
mikeserv

2
나는 한 번도 읽지 못한 리눅스 사용자들을 많이 만났다 stat. 그래서 가끔은 단지에 대한 몇 가지주의를 지시 할 stat... 내 생각은 stat... 그것을받을 자격

2

최신 GNU 도구 만 사용하여 파일 이름을 강력하게 나열하려면 :

find . -printf '%A@ %p\0' |
  sort -nz |
  sed -z 's/^[^ ]* //' |
  tr '\0' '\n'

2
find $DIR -depth -maxdepth 3 \
    -type d -readable -printf \
    'printf "\\n%p\\n"
    ls -t --color=always "%p"\n' |\
    . /dev/stdin 2>&-

인수 ls가 수신 되는 유일한 인수 는 나열하려는 디렉토리의 이름 이기 때문에 인수 목록 문제를 피할 수 있습니다. 원하는대로 할 수 있습니다.

쉘은 단지 쉘 스크립트로 - 동일한 프로세스의 때 발생할 수있는 문제점이없는 호출됩니다.. sources|pipeexecve

어쨌든-위의 내용은 3 단계로만 변경 가능합니다 maxdepth. 또한 깊은 우선 순위를 가지므로 현재 디렉토리로 거꾸로 작업합니다 depth.

당신은 또한 얻을 알 수 있습니다 $LSCOLORS그것은 또한 깔끔하게 인쇄 된 열 및 다른 모든 것들 당신이에서 원하는 것이 제공 내 컴퓨터에 - ls- 그 문제에 대한, 또는 무엇이든 당신은 당신이 할 싶어 것 상상할 수. source.

SVN 없음

다시, 이것은 당신이 기대하는 모든 것을 할 것입니다 ls. 따라서 .svn파일을 숨기는 것은 ls행을 다음 과 같이 변경하는 것만 큼 간단 합니다.

ls -t --color=always --hide="*svn" "%p"\n

또는 svn모든 폴더에서 확장자 를 보려면 ./svn전체 명령을 다음과 같이 변경하십시오.

    find $DIR -depth -maxdepth 3 \
        -type d -readable -printf \
            'printf "\\n%p\\n" ; hide=
            [ "%p" = "./svn" ] && hide="*svn"
            ls -t --color=always --hide="$hide" "%p"\n' |\
    . /dev/stdin 2>&-

개인적으로, 나는 그것을 ls로 좋아 -s하며, 관심이 있다면 -u모드 시간보다는 액세스 시간을 기준으로 정렬합니다.


1

이 중 가장 오래된 것이 가장 오래된 것으로 나열됩니다 files .<dir>

find <dir> -type f -print0 | xargs -0 ls -ltr

그리고 이것으로 최신 수정이 최상위입니다

find <dir> -type f -print0 | xargs -0 ls -lt

파일 이름 목록이 시스템의 총 명령 줄 길이 제한을 초과하지 않는 경우에만 작동합니다.


사실, 잊어 버렸습니다
UnX

명령에 대한 참조 : arg list in-ulm.de/~mascheck/various/argmax
UnX

@Gilles : xargs -0둘 다 의미 합니다.  xargs -print0에 해당 xargs -p -r -i -n -t -0하거나 xargs -inprt0또는 xargs -0ntrip당신이 무엇을 의미하는지 아마이다.
Scott
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.