수백 개의 파일이 포함된 목록이 있습니다. 현재는 다음과 같습니다.
filename.New_20160901.dat
filename.New_20160902.dat
...
까지 기다리세요
filename.New_<current date>.dat
현재 로그인 디렉터리에서 파일을 가져오려는 프로세스가 있지만 파일 이름 형식이 완전히 다릅니다.
내가하고 싶은 것은 파일 이름을 바꾸되 날짜는 유지하는 것입니다. 예를 들어 파일을 변경한다면 다음과 같습니다.
$ mv filename.New_20160902.dat FILE_NAME_NEW.20160902.dat
하나의 파일에 대해서는 쉽지만 일련의 파일에 대해서는 어떻게 수행합니까? 이전 파일 이름의 날짜 부분을 추출하여 변수로 저장하고 mv
이전 파일을 새 파일 이름으로 새 파일에 저장하고 날짜 부분은 동일하게 유지하고 싶습니다.
감사해요
답변1
노력하다
rename -n s/filename.New_/FILE_NAME_NEW./ filename.New*
제안된 이름 바꾸기에 동의하는 경우 실행할 필요가 없습니다.-n
답변2
이런 것을 시도해 보세요
for x in *; do
mv "${x}" FILE_NAME_NEW."${x#filename.New_}"
done
echo
mv
파일 이름을 바꾸기 전에 효과를 확인할 수 있도록 먼저 사용하십시오 . "${x}"는 파일 이름이 있는 변수(예: filename.New_20160901.dat
)이고 "${x#filename.New_}"는 시작 부분에 있는 경우 삭제된 파일 이름 filename.New_
(예: 20160901.dat
)입니다.
답변3
타임스탬프가 포함된 파일(다른 파일 제외)을 일치시키려면 다음을 사용하세요.
#!/bin/bash
for x in filename.New_[0-9]*.dat; do
echo "file --> $x"
echo mv "${x}" "${x/filename.New_/FILE_NAME_NEW.}"
done
실제로 이동을 수행하려면 (스크립트에서 선택한 파일에 만족한 후) mv 앞의 에코를 제거하세요.