.png)
내 폴더에는 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
답변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
- 날짜는 디렉토리를 정렬하고 가장 최근에 수정된 전체 이름을 출력합니다(잘라낸 기본 구분 기호 탭으로 일부 공백이 포함되어 있는 경우에도).