쉘 스크립트에서 날짜가 있는 파일의 이름을 다른 날짜로 바꿉니다.

쉘 스크립트에서 날짜가 있는 파일의 이름을 다른 날짜로 바꿉니다.

내 홈 디렉토리에 파일이 있습니다

 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. 변경하고 싶지 않은 파일을 삭제하세요. 따라서 위의 패턴은 중요하지 않습니다.모두변경하려는 파일, 필요한 경우 누락된 파일을 수동으로 추가합니다. 각 줄을 xxxXXX 에서 mv xxx XXXXXX와 유사하지만 수정 날짜가 있는 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

관련 정보