특정 디렉터리(절대 경로 제공)에 있는 모든 파일(절대 경로 포함)을 수정 날짜 순으로 나열하고 싶습니다.

특정 디렉터리(절대 경로 제공)에 있는 모든 파일(절대 경로 포함)을 수정 날짜 순으로 나열하고 싶습니다.

모든 파일을 나열하고 싶습니다(절대 경로 사용) 수정된 날짜 순서로 지정된 디렉터리(하위 디렉터리 아님)의 파일만 표시합니다. ls /path_to_dir -t는 수정 날짜를 기준으로 파일을 나열하지만 전체 경로를 제공하지는 않습니다. 추가 설명: 내 작업 디렉터리는 /home/emirates/Code입니다.
내가 나열하고 싶은 작업 디렉토리에서:

  • 전체 절대 경로가 있는 파일만
  • 파일 수정 순서에 따라
  • /var/reports 디렉토리에서
  • 내 작업 디렉토리는 변경될 수 있습니다. 즉, 프로덕션 환경에서는 어디에나 있을 수 있습니다.

답변1

그리고 zsh:

print -rC1 -- ${PWD%/}/path_to_dir/*(NDom.) # regular files only

print -rC1 -- ${PWD%/}/path_to_dir/*(NDom^/) # any type of file except
                                             # directory (so includes
                                             # symlinks, fifos, devices,
                                             # sockets... in addition to
                                             # the regular files above)

print -rC1 -- ${PWD%/}/path_to_dir/*(NDom-^/) # any type except directory 
                                              # but this time the type is
                                              # determined after symlink
                                              # resolution so would also
                                              # exclude symlinks to
                                              # directories.

print -rC1 -- ${PWD%/}/path_to_dir/*(ND-om^/) # same but also use the
                                              # modification time of the target
                                              # of symlinks when sorting

print -rC1 -- path_to_dir/*(ND-om^/:P) # same but print the real path for each
                                       # file. That is, make sure it's absolute
                                       # and none of the path components
                                       # are symlinks.

${PWD%/}$PWDis는 yes의 경우를 처리 하므로 no를 /얻습니다 ./path_to_dir/files//path_to_dir/files

이건 ${PWD%/}/그냥 접두사일 뿐이야비교적경로(예: path_to_dir)는 이미 절대 경로(예: )가 아닌 절대 경로로 만듭니다 /absolute/path_to_dir.

그래서 당신을 위해 /var/reports사용하십시오print -rC1 -- /var/reports/*(...)

답변2

당신은 그것을 사용할 수 있습니다 find:

GNU 구현을 가정하고 find( cut그렇지 않으면 sort 텍스트가 아닌 처리를 위해 이식 가능하지 않음) 파일 경로에 개행 문자가 포함되지 않는다는 점에 유의하세요. 또한 디렉토리는 제외되지만 심볼릭 링크(일반 파일을 가리키는지 여부에 관계없이), fifo, 장치, 소켓을 포함한 기타 모든 비정규 유형의 파일도 제외됩니다.

find "$PWD/relative_path" -maxdepth 1 -type f -printf "%T@\0%p\n"| sort -rn | cut -d '' -f2

maxdepth재귀 수준을 알려주면서 지정된 경로의 파일을 나열합니다 .


다음에서 빌림Unix/Linux 찾기 및 수정된 날짜별로 정렬.

답변3

경로에 개행 문자가 없다고 가정합니다.

ls -ltd "$PWD/relative_path/"* | grep -v '^d'

현재 디렉터리의 파일을 나열하려면 해당 파일을 삭제하면 됩니다 /relative_path. 물론 절대 경로를 즉시 제공할 수도 있습니다.

ls -ltd "/var/reports/"* | grep -v '^d'

도트 파일을 나열하려면 Bash 및 Ksh에서 간단히 바꿀 수 있습니다 *. {*,.*}Zsh에서는 setopt cshnullglob이 작업을 먼저 수행해야 합니다. 그렇지 않으면 디렉터리에 도트 파일이나 도트가 아닌 파일이 없으면 명령이 실패합니다.

에서 적응https://stackoverflow.com/a/5580868.

관련 정보