파일 이름의 문자열을 변경하려면 다음 명령을 어떻게 개선할 수 있습니까?
find . -type f -name '*<today>*' -exec mv {} {}_renamed \;
사실 내 디렉토리에는 이름에 오늘 날짜가 포함된 파일이 몇 개 있습니다. 파일 이름 중 날짜 문자열만 오늘 날짜에서 어제 날짜로 변경되도록 모든 파일의 이름을 변경하고 싶습니다.
파일 이름에 접미사나 접두사를 추가하고 싶지 않고 오히려 파일 이름을 조작하고 싶습니다.
예를 들어,
명령 파일 이름 앞에는 xxx20170821yyyy.ppp
명령 파일 이름이 옵니다.xxx20170820yyyy.ppp
그리고 이름에 문자열이 포함된 모든 파일에 대해 이 작업을 반복합니다 20170821
.
답변1
rename
Perl 명령의 일부로 사용됩니다 .
find . -type f -name '*20170919*' -execdir
rename -n 's/20170919/20170918/' '{}' \;
execdir
반환된 상대 경로에 있는 파일에 대해 실행하기 위해 명령의 일부를 실행할 때 사용됩니다 execdir
. 이렇게 하면 파일의 전체 경로(현재 작업 디렉터리 기준)가 전달되지 않고 동일한 폴더를 사용하지 않게 됩니다.무늬이름 바꾸기 오류는 파일 이름 자체가 아닙니다.
모든 파일이 단일 디렉터리에 있으면 다음 줄로 rename
충분합니다.
rename -n 's/20170919/20170918/' *20170919*
-n
이름 변경으로 인해 실제 이름이 변경되었다고 생각되면 삭제하세요. -v
이름이 바뀌는 내용을 보려면 추가해야 할 수도 있습니다 .
마지막으로, 매일 여러 파일에 대해 이 작업을 수행하려면 오늘 날짜가 필요할 수 있습니다. 그런 다음 큰따옴표 사이에 date
다음 명령 $(...)
(명령 대체) 을 사용하십시오.
find . -type f -name "*$(date +"%Y%m%d")*" -execdir
rename -n "s/$(date +"%Y%m%d")/$(date -d "-1day" +"%Y%m%d")/" '{}' \;
추신, 쉘을 사용하고 있으므로 대신 csh
를 사용 하거나 새 쉘로 전환 하는 것이 더 좋습니다 .`...`
$(...)
bash
zsh
find ./ -type f -name "*`date +"%Y%m%d"`*" -execdir
rename -n "s/`date +"%Y%m%d"`/`date -d "-1day" +"%Y%m%d"`/" '{}' \;