수정 날짜 순서대로 jpg 파일을 나열한 다음 xargs를 사용하여 숫자 순서(0.jpg, 1.jpg, 2.jpg 등)로 이름을 바꾸는 bash 스크립트가 있습니다. 이는 여러 디렉터리에서 발생해야 합니다. 코드는 다음과 같습니다.
ls -1rt "/media/171/" | xargs rename 's/^[^\.]*(\..*)?$/our $i; sprintf("%01d$1", $i++)/e'
ls -1rt "/media/193/" | xargs rename 's/^[^\.]*(\..*)?$/our $i; sprintf("%01d$1", $i++)/e'
ls -1rt "/media/211/" | xargs rename 's/^[^\.]*(\..*)?$/our $i; sprintf("%01d$1", $i++)/e'
문제는 스크립트를 실행하면 파일이 제대로 나열되지만 xargs에서 지정된 파일을 찾을 수 없다는 오류가 발생한다는 것입니다. 각 디렉토리에서 명령을 실행하는 경우에만 작동합니다. Bash 스크립트에서는 "cd /"를 수행할 수 없다는 것을 깨달았습니다. 문제는 xargs가 전체 파일 경로를 전달하지 않는 것 같습니다. xargs 명령에 전체 파일 경로를 전달하는 방법은 무엇입니까?
답변1
이 경우 파일에 대해 발생할 수 있는 유일한 오류는 xargs
실행 파일을 찾을 수 없다는 것입니다. rename
파일에 관한 다른 모든 내용은 xargs
실행 중인 프로그램에서 나와야 합니다.
이 명령은 쉘 스크립트에서 사용할 수 있습니다 cd
. 그러나 이 경우 스크립트는 어떤 디렉토리를 사용해야 하는지 알 수 없습니다.
당신은 시도하고 싶을 수도 있습니다
( cd "/media/171/" && ls -1rt | xargs rename 's/^[^\.]*(\..*)?$/our $i; sprintf("%01d$1", $i++)/e' )