마지막으로 다운로드한 두 파일을 이동하려면 다음과 같은 작업을 수행하고 싶습니다.
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]
: 처음 두 항목만 선택합니다.
또한 일치하는 항목이 없으면 명령이 실패한다는 점에 유의하십시오(다른 쉘이 실수로 잘못된 파일/디렉토리를 이동할 수 있음).