최신 디렉터리 가져오기(최신 파일 아님)

최신 디렉터리 가져오기(최신 파일 아님)

내 폴더에는 parent다음과 같은 내용이 있습니다.

A.Folder B.Folder C.File

그 안에 폴더와 파일이 모두 들어있습니다. B.Folder더 새로운 것입니다. 이제 나는 단지 을 얻고 싶습니다 B.Folder. 어떻게 이것을 달성할 수 있습니까? 나는 이것을 시도했다.

ls -ltr ./parent | grep '^d' | tail -1

하지만 그것은 나에게 주어지지만 drwxrwxr-x 2 user user 4096 Jun 13 10:53 B.Folder이름 만 있으면됩니다 B.Folder.

답변1

이 시도:

$ ls -td -- */ | head -n 1

-t옵션을 사용하면 ls수정 시간을 기준으로 최신 항목부터 정렬됩니다.

제거하려면 다음을 수행하십시오 /.

$ ls -td -- */ | head -n 1 | cut -d'/' -f1

답변2

ls -td -- ./parent/*/ | head -n1 | cut -d'/' -f2

차이점허슨의 솔루션뒤에 슬래시가 있는데 *, 이는 쉘이 dir이 아닌 모든 파일을 무시하도록 만듭니다. 차이점누크, 다른 폴더에 있으면 작동합니다.

Cut은 후행 '/'를 삭제하려면 상위 디렉터리 수(2)를 알아야 합니다. 그게 없으면 이용하세요

VAR=$(ls -dt -- parent/*/ | head -n1); echo "${VAR::-1}"

답변3

필수 zsh 답변:

latest_directory=(parent/*(/om[1]))

괄호 안의 문자는글로벌 한정자: /디렉터리만 일치시키고, om연령이 증가함에 따라 일치 항목을 정렬하고, [1]첫 번째(즉, 최신) 일치 항목만 유지합니다. N의 하위 디렉터리가 없는 경우 빈 배열(일반적으로 요소가 1개 있는 배열)을 얻으려면 추가하세요 parent.

또는 parent쉘 글로빙 문자가 포함되어 있지 않다고 가정합니다.

latest_directory='parent/*(/om[1])'; latest_directory=$~latest_directory

zsh는 없지만 최신 GNU 도구(즉, 내장되지 않은 Linux 또는 Cygwin)가 있는 경우 를 사용할 수 있지만 find번거롭습니다. 한 가지 방법은 다음과 같습니다.

latest_directory_inode=$(find parent -mindepth 1 -maxdepth 1 -type d -printf '%Ts %i\n' | sort -n | sed -n '1 s/.* //p')
latest_directory=$(find parent -maxdepth 1 -inum "$latest_directory_inode")

ls디렉토리 이름에 줄 바꿈이나 (일부 시스템에서는) 인쇄할 수 없는 문자가 포함되어 있지 않은 한 작동하는 간단한 솔루션이 있습니다 .

latest_directory=$(ls -td parent/*/ | head -n1)
latest_directory=${latest_directory%/}

답변4

다음 명령은 디렉토리 이름에 공백이 포함된 경우에도 작업을 수행합니다.

cp `find . -mindepth 1 -maxdepth 1 -type d  -exec stat --printf="%Y\t%n\n" {} \;  |sort -n -r |head -1 |cut -f2'`/* /target-directory/.

백틱에 있는 항목에 대한 업데이트된 설명은 다음과 같습니다.

  • .- 현재 디렉터리(여기서 절대 경로를 지정할 수 있음)
  • -mindepth/-maxdepth- find 명령을 현재 디렉토리의 직계 하위 항목으로만 제한합니다.
  • -type d- 디렉토리만
  • -exec stat ..- 수정된 시간과 디렉토리 이름을 find에서 탭(공백 아님)으로 구분하여 출력합니다.
  • sort -n -r |head -1 | cut -f2- 날짜는 디렉토리를 정렬하고 가장 최근에 수정된 전체 이름을 출력합니다(잘라낸 기본 구분 기호 탭으로 일부 공백이 포함되어 있는 경우에도).

관련 정보