내 디렉토리에 여러 파일이 있습니다. 예를 들어:
eventDataLog.txt.2015-04-23-22
eventDataLog.txt.2015-04-23-23
eventDataLog.txt.2015-04-24-01
eventDataLog.txt.2015-04-24-02
eventDataLog.txt.2015-04-24-03
eventDataLog.txt.2015-04-24-04
나는 그것들을 모두로 바꾸고 싶다
abc-eventDataLog.txt.2015-04-23-22
abc-eventDataLog.txt.2015-04-23-23
abc-eventDataLog.txt.2015-04-24-01
abc-eventDataLog.txt.2015-04-24-02
abc-eventDataLog.txt.2015-04-24-03
abc-eventDataLog.txt.2015-04-24-04
이 작업을 수행하기 위해 mv 명령을 어떻게 사용할 수 있습니까? 나는 이것을 사용했다
mv eventDataLog.txt.2015-* ec2prod-eventDataLog.txt.2015-*
mv: target ‘ec2prod-eventDataLog.txt.2015-*’ is not a directory
하지만 작동하지 않습니다
하지만 해당 디렉터리에는 다른 많은 파일이 있으므로 대답이 적절하며, eventDataLog.txt 파일도 현재 파일이고 사용 중이므로 무시해야 합니다.
답변1
Bash는 이럴 때 유용합니다.
for FILE in eventDataLog.txt.2015*; do mv "$FILE" "abc-$FILE"; done
답변2
명령을 사용하여 이 작업을 수행 할 수 있습니다 rename
. 귀하의 경우에는 이렇게 할 것입니다 rename eventDataLog.txt.2015 abc-eventDataLog.txt.2015 eventDataLog.txt*
.
사용되는 구문은 입니다 rename frompattern topattern listoffilessuchaswildcardmatch
.
답변3
나는 이 mmv
도구를 사용하여 다음을 수행할 것입니다.
mmv eventDataLog.txt.\* abc-eventDataLog.txt.\#1
이는 일괄 이름 바꾸기를 위해 특별히 설계되었습니다.
답변4
주문하다
for FILE in $(ls -1 | egrep '^eventDataLog' | egrep -v '^eventDataLog.txt$'); do mv $FILE abc-$FILE; done
노트
egrep
정규식을 지원하는 버전이며 대부분의 배포판에grep
포함되어 있습니다.grep
- 먼저
egrep
"eventDataLog"로 시작하는 모든 파일을 필터링합니다. - 두 번째는
egrep
모든 파일을 필터링합니다.원하지 않는다(-v
참고 사항역일치)는 무시하려는 파일의 전체 이름과 일치합니다.
입증하다
$ ls -1
eventDataLog.txt
eventDataLog.txt.2015-04-23-22
eventDataLog.txt.2015-04-23-23
eventDataLog.txt.2015-04-24-01
eventDataLog.txt.2015-04-24-02
eventDataLog.txt.2015-04-24-03
eventDataLog.txt.2015-04-24-04
myOtherFile
mySecondOtherFile
$ for FILE in $(ls -1 | egrep '^eventDataLog' | egrep -v '^eventDataLog.txt$'); do mv $FILE abc-$FILE; done
$ ls -1
abc-eventDataLog.txt.2015-04-23-22
abc-eventDataLog.txt.2015-04-23-23
abc-eventDataLog.txt.2015-04-24-01
abc-eventDataLog.txt.2015-04-24-02
abc-eventDataLog.txt.2015-04-24-03
abc-eventDataLog.txt.2015-04-24-04
eventDataLog.txt
myOtherFile
mySecondOtherFile