Bash - 파일 목록이 포함된 txt + ctime

Bash - 파일 목록이 포함된 txt + ctime

디렉토리의 폴더와 폴더 생성 날짜(또는 ctime)를 나열하는 txt를 생성할 수 있습니까?

그것은 다음과 같습니다:

폴더.txt:

폴더 1 2016/08/02

폴더 A 2016/08/03

현재 가지고 있는 정보는 다음과 같습니다. 하지만 생성 날짜는 없습니다.

find /directory/* -type d -exec bash -c 'echo ${0#/directory/}' {} \; > /directory/folders.txt

답변1

ctime있으니 참고하세요inode 변경 상태 시간, 생성 시간이 아닌 inode 생성 시간이라고도 하는 생성 시간은 때때로 호출되지만 btime모든 Unices 또는 모든 파일 시스템에서 사용할 수 있는 것은 아닙니다.

예를 들어 Linux에서는 대부분의 기본 파일 시스템에 출생 시간이 기록되지만 현재 이를 검색할 수 있는 API가 없습니다.

그럼에도 불구하고 이것은 inode가 마지막으로 활성화된 시간입니다. 이는 데이터가 삽입된 시기(일반적으로 inode가 생성된 후에 발생함)를 반영하지 않으며, 파일 이름이 바뀌거나 파일이 디렉터리에 링크된 시기(현재 참조하는 이름으로)를 반드시 반영하지도 않습니다. 다른 디렉터리에 연결되어 있는 경우(또는 다른 이름과 동일) 생년월일은 업데이트되지 않습니다.

가장 좋은 방법은 일반적으로 마지막 수정 시간을 사용하는 것입니다. 이는 파일에 있는 데이터의 수명을 더 잘 나타냅니다.

GNU를 사용하면 find다음을 사용할 수 있습니다.

find /directory -mindepth 1 -maxdepth 1 -type d -printf '%P %TY/%Tm/%Td\n'

그리고 zsh:

zmodload zsh/stat
(cd /directory && zstat -LF '%Y/%m/%d' +mtime -- *(D/))

( 와 비교하여 정렬된 목록을 제공합니다 . glob 한정자를 사용하여 정렬을 비활성화하거나 수정 시간을 사용하여 정렬 find할 수 있습니다 )oNom

답변2

일반적 ls -lc으로 이렇게 되어야 합니다. 그러나 이것은 파일과 디렉토리를 보여줍니다.

따라서 우리는 속임수를 써서 입력하도록 요청할 수 있습니다 */. 오직 디렉토리만이 일치할 것입니다. 하지만 -d플래그 도 필요합니다 .

ls -lcd */

특정 레이아웃을 원한다고 해서 ls반드시 최상의 출력이 필요한 것은 아닙니다.

stat가지고 있는 경우 다음을 사용할 수 있습니다.

stat --format="%n %z" */

심볼릭 링크가 디렉터리를 가리키는 경우 둘 다 심볼릭 링크를 따릅니다.

이것을 원하지 않으면 우리는 다음을 사용할 수 있습니다find

find * -maxdepth 0 -type d -printf "%p %c\n"

재귀를 원한다면

find * -type d -printf "%p %c\n"

관련 정보