ls로 상대 경로를 얻는 방법은 무엇입니까?

ls로 상대 경로를 얻는 방법은 무엇입니까?

마지막으로 다운로드한 두 파일을 이동하려면 다음과 같은 작업을 수행하고 싶습니다.

mv ` ls -rt ~/Downloads/ | tail -2 ` .

아쉽게도 ls파일명만 나와있습니다. 위 코드를 어떻게 수정할 수 있나요?

(누군가 지적하기 전에 나는 파이프 출력의 문제를 알고 있습니다 ls. 문제의 파일 이름을 아는 경우에만 사용하겠습니다.)

답변1

좋아, 그러니 포기하지 않는다면 ls적어도 모든 것에 백틱을 사용하는 습관을 버리도록 노력하세요. 특히 xargs더 적절할 때는 더욱 그렇습니다.

ls -rtd ~/Downloads/* | tail -n2 | xargs -I{} mv {} .

답변2

거기에서 GNU를 사용할 수 있습니다 find.

mv $(find ~/Download -mindepth 1 -maxdepth 1 -printf '%Ts %p\n' | sort -n | cut -d ' ' -f2- | tail -n 2) .

옵션 find -printf:

  • %Ts시간을 다음과 같이 표시합니다.연대
  • %p파일 경로

바라보다man find | less +/'^ *-printf'

편집하다

파일 이름에서 공백을 처리해야 하는 경우 다른 솔루션을 권장합니다.

find -maxdepth 1 -printf '%Ts %p\n' |
    sort -n |
    cut -d ' ' -f2- |
    tail -n 2 |
    xargs -i% mv % .

답변3

.In 인수 ls -rt ~/Downloads/*대신 사용하면 문자열이 먼저 쉘에 의해 확장됩니다(이를 호출합니다).ls -rt ~/Downloads/ls -rt ~/Downloads/*파일 이름 와일드카드). 따라서 ls -rt명령에 대한 인수 로 경로 목록을 얻고 명령은 options 를 통해 지정한 방식으로 경로 목록을 정렬합니다 ls. 대신 이 명령은 ls -rt ~/Downloads/디렉터리의 내용을 읽습니다 ~/Downloads/. 디렉터리 경로가 포함되지 않은 파일 목록입니다.

답변4

zsh 사용:

mv ~/Downloads/*(.om[1,2]) .

(...)부분을 이라고 합니다와일드카드 한정자, 트럼프 카드 중 하나입니다 zsh. 각 한정자(일반적으로 단일 문자)를 사용하면 파일 속성(유형, 크기, 시간...)을 기준으로 일치하는 항목을 필터링하고 확장 순서를 변경하거나 확장 방법을 수정할 수 있습니다.

위에는 다음이 있습니다.

  • .(점): 일반 파일만 선택합니다(디렉토리, 심볼릭 링크 제외...).
  • om:목록 정렬산화 시간.
  • [1,2]: 처음 두 항목만 선택합니다.

또한 일치하는 항목이 없으면 명령이 실패한다는 점에 유의하십시오(다른 쉘이 실수로 잘못된 파일/디렉토리를 이동할 수 있음).

관련 정보