당신은 " 머리에 파이프 ls 완료하는 데 시간이 오래 걸린다"고 말합니다.
이 원인은 ls
디렉토리 가 아닌 디렉토리의 파일 수입니다. 단일 디렉토리에 100,000 개의 파일이있는 경우이 문제를 해결하려면 100,000 개 파일 모두에 대한 정보를 가져 와서 정렬하거나 출력을 인쇄해야합니다.
시간이 너무 오래 걸리면 실제 해결책은 파일을 여러 디렉토리로 분할하는 것입니다.
여러 디렉토리에 파일을 분산시킬 수없는 경우 고려할 파일 수를 좁힐 수있는 방법이 있습니까? 예를 들어 파일 이름에 날짜가 포함되어 있으면 시스템에서 100,000 개의 파일을 정렬 할 필요가 없도록 와일드 카드를 포함시킬 수 있습니다. 아니면 순차적으로 번호가 매겨 졌습니까? (이것은 도움이 될 수도 있고 아닐 수도 있지만 시도해 볼 가치가 있습니다.)
이 작업을 몇 번이나 시도하고 있습니까? 아마도 재사용을 위해 출력을 저장 / 캐싱 할 가치가 있습니다 .
이제 질문이 있습니다.
당신이 있습니까 있는지 당신은 "생성 시간"이 아닌 "변화의 시간"을 의미 ? 대부분의 도구는 "생성 시간"이 아닌 "변경 시간"만 표시 할 수 있습니다.
"생성 시간"을 얻는 것은 매우 새로운 일이며, ext4 파일 시스템과 설치하기 쉽지 않은 일부 도구가 필요합니다.
시간을 바꾸고 싶다면
변경 시간 (짧은 시간)은 파일의 속성이 마지막으로 변경된 시간을 의미합니다.
ls -c
ctime을 기준으로 정렬합니다.
내림차순이 아닌 오름차순으로 출력을 원하므로 -r
옵션을 사용 하여 출력을 반전시켜야합니다 .
따라서 다음과 같이 할 수 있습니다.
ls -cr | head -n 100
다음을 사용하여 동일한 문제에 대한 더 긴 해결책 stat
:
find . -mindepth 1 -maxdepth 1 -exec stat -c $'%Z\t%n' '{}' \; |
sort -k 1n |
cut -f 2 -d $'\t' |
head -n 10 |
sed -e 's/^\.\///'
그러나 그것은 ls -cr
내 시스템 보다 느리게 실행됩니다 .
수정 시간을 원한다면
수정 시간 (mtime for short)은 파일 내용이 마지막으로 변경된 시간을 의미합니다.
ls -t
mtime을 기준으로 정렬합니다.
변경 ls -cr
에 대한 ls -tr
(최고의 옵션) 또는 변경 stat -c $'%Z\t%n'
에 stat -c $'%Y\t%n'
.
생성 시간이 필요한 경우
(짧은 시간)
이것은 더 어렵다.
먼저, 디렉토리가를 사용하여 포맷 된 파일 시스템에 있는지 확인하십시오 ext4
. tune2fs -l <device name>
이를 확인 하는 데 사용할 수 있습니다 .
그런 다음 여기에 도움 이되는 새로운 stat
형식 %W
이 있습니다. 이를 얻으려면 2010 년 10 월 이후에 릴리스 된 GNU Coreutils 버전을 다운로드하여 압축을 풀고 컴파일 한 후 설치해야합니다.
그런 다음 커널에 따라 작동 할 수도 있습니다 (시도하지 않았 음).
find . -mindepth 1 -maxdepth 1 -exec stat -c $'%W\t%n' '{}' \; |
sort -k 1n |
cut -f 2 -d $'\t' |
head -n 10 |
sed -e 's/^\.\///'
또한보십시오:
에 대한 오류가 발생하면 "'$\t'
'$\t'
표기가 필요 bash
하거나 zsh
: 그것은 작동하지 않습니다 dash
또는 sh
우분투. 당신이 정말로 그 껍질을 사용해야하는 경우, 당신은 어떤을 변경해야합니다 \t
에 Ctrl+ V, Tab및 주요한 제거 $
단지 오프닝 인용 앞에서합니다.
find -mtime +<number of days> -delete
경우 특정 연령보다 오래된 모든 파일을 정리하는 것이 좋습니다. 즉, 정렬이 필요하지 않습니다.