
내 홈 디렉토리에 파일이 있습니다
member_net.2017-04-20.control
member_elig_net.2017-04-20.control
mdcr_contractr_net.2017-04-20.control
같은 디렉토리에 있는 파일의 이름을 다른 날짜로 바꾸고 싶습니다.
member_net.2017-04-21.control
member_elig_net.2017-04-21.control
mdcr_contractr_net.2017-04-21.control
이 파일은 0바이트가 아닙니다.
답변1
또 다른 방법은 예를 들어 bash에서 쉘 스크립트를 작성하는 것입니다.
#!/bin/bash
for f in *.2017-04-20.* ;do
mv "$f" "${f/2017-04-20/2017-04-21}"
done
이 경우 다른 솔루션보다 훨씬 간단하지만 항상 다른 솔루션을 염두에 두는 것이 좋습니다.
답변2
Perl rename
명령을 사용하십시오.
rename -n -v 's/2017-04-20/2017-04-21/' *.control
( -n
아무것도 하지 않음을 나타내며, -v
실제로 실행하기 전에 수행하는 작업을 확인할 수 있도록 세부 정보를 나타냅니다.)
답변3
이것이 일회성인 경우 다음 절차가 편의성과 견고성 사이에서 최선의 선택이라고 생각합니다.
패턴과 함께 ls를 사용하여 필요한 파일을 선택하고 출력을 파일로 리디렉션합니다(패턴은 단지 예일 뿐이지만 다음 단계에서는 중요하지 않습니다).
ls member_net.*.control > file.list
즐겨 사용하는 편집기에서 편집하세요
file.list
. 변경하고 싶지 않은 파일을 삭제하세요. 따라서 위의 패턴은 중요하지 않습니다.모두변경하려는 파일, 필요한 경우 누락된 파일을 수동으로 추가합니다. 각 줄을xxx
XXX 에서mv xxx XXX
XXX와 유사하지만 수정 날짜가 있는 XXX로 변경합니다. 이 단계는 편집기에 따라 다르지만sed
원본 파일을 사용하고paste
파일을 함께 붙여 넣어 수행할 수도 있습니다.sed 's/2017-04-20/2017-04-21/g' file.list > newfile.list
paste file.list newfile.list > bothfiles.list
sed 's/^/mv /' bothfiles.list > commands.list
이제
commands.list
다음 형식의 명령줄이 포함된 파일이 있어야 합니다.mv OLDNAME NEWNAME
각 명령줄이 정확하고 완전한지 다시 확인하세요.
그런 다음 파일을 셸로 전송하여 명령을 실행할 수 있습니다.
cat commands.list | bash
제가 생각하는 매력은 파일을 확인하고 완전히 올바른지 확인한 다음전혀 만지지 마세요그 안의 모든 명령을 실행하고 올바른 일을 하는지 확인하세요.
이는 쉘 스크립트를 작성하는 것만큼 일반적이지는 않지만 기억해두면 유용한 기술입니다.
답변4
다음은 도움이 될 수 있는 쉘 스크립트입니다. 다른 날짜를 선택할 수 있습니다. 현재 날짜를 사용하고 있습니다. 쉘 스크립트를 myrename.sh로 저장하고 호출하십시오 ./myrename.sh dirname
. dirname
영향을 받은 파일의 디렉터리 이름은 어디에 있습니까?
#!/bin/bash
for i in `ls $1 | grep -E '[0-9]{4}-[0-9]{2}-[0-9]{2}'`
do
x=`echo $i | grep -oE '[0-9]{4}-[0-9]{2}-[0-9]{2}'`
y=`echo $i | sed "s/$x/$(date +%F)/g"`
mv $1/$i $1/$y 2>/dev/null #incase if old date is same as current date
done