가장 최근에 수정 된 파일 이동


0

"Pictures /"에서 가장 최근에 수정 된 파일을 이동하려고합니다. 이것이 내가 시도한 것입니다.

find Pictures/ -maxdepth 1 -type f -mmin -60 -print0|tail -1| xargs -0 -I {} mv "{}" Dropbox/somefolder/

이것은 작동하지 않으며 파일이 지난 한 시간 동안 수정되었다고 추측하기 때문에 이상적인 솔루션이 아닙니다.

이 오류가 발생합니다.

mv: cannot stat 'Pictures/file.jpg' : No such file or directory

감사!


GNU Linux를 사용하고 있습니까? 또는 OS X, BSD 또는…
slhck

답변:


0

당신이 사용하는 경우 -print0, tail(파일 경로가 수행하지 않는 몇 가지 않을 이유) 당신의 출력이 줄 바꿈 포함되어 있지 않기 때문에 작동하지 않습니다.

파일이 GNU를 사용하여, 자신의 경로에 줄 바꿈을 포함하지 않는 것으로 가정하면 find, sortxargs:

find ~/Pictures -type f -printf '%T@ %P\n' | \
sort -k 1nr | sed 's/^[^ ]* //' | head -n 1 |  xargs -I {} mv "{}" ~/Dropbox

Zsh를 사용하는 경우 매우 간단합니다. 다시 줄 바꿈은 허용되지 않습니다.

mv -- "$(print -l **/*(.om) | head -n 1)" ~/Dropbox

여기 **/*에는 재귀 적 glob이 있으며 괄호 안에는 한정자가 있습니다 .

  • . – 일반 파일
  • o – 파일 정렬
  • m – 수정 시간

0

숨겨진 파일을 찾을 필요가없는 한 그렇게해야합니다.

cd /path/to/Pictures
mv "`ls -ltr | grep -v ^d | tail -1 | tr -s ' ' | cut  -d ' ' -f9-`" /path/to/dropbox

2
파일 이름에 공백이 있으면 실패합니다. 출력을 구문 분석하지 마십시오 ls. .
slhck

좋은 지적. 컷을 -f9에서 -f9-로 변경하고 큰 따옴표를 추가했습니다. 내가 알지 못하는 ls를 구문 분석하지 않는 더 많은 이유가 있지만 적어도 이것은 파일 이름에서 공백을 잡아 내고 다른 특수 문자를 잡을 수 있습니다.
Omnipresence

허. 까다로워집니다 (따라서 구문 분석 ls이 권장되지 않습니다). 파일에 두 개의 공백이 있으면 어떻게됩니까? 그런 다음로 mv연속 공백을 제거했기 때문에 찾을 수 없습니다 tr. 이것이 가능성이 높지는 않지만 결코 알 수는 없습니다.
slhck

동의했다. 귀하의 솔루션이 훨씬 좋습니다. 날짜별로 찾기에서 파일을 정렬하는 방법을 생각할 수 없었습니다.
Omnipresence
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.