부품을 유지하면서 파일 이름 바꾸기

부품을 유지하면서 파일 이름 바꾸기

파일 이름에 IP 주소를 유지하면서 여러 파일의 일부 이름을 바꿔야 합니다.

예를 들어,

Abc_192.168.1.164_001.txt
Abc_10.11.76.112_001.txt
Abc_54.78.1.1_002.txt

IP 주소뿐만 아니라 "Abc_" 부분도 유지해야 합니다. 그 이후의 모든 내용은 날짜 및 시간 스탬프로 대체됩니다. 현재 날짜와 타임스탬프를 "_yymmdd-yymmdd-hhmmss"로 추가하고 확장자를 ".csv"로 변경하겠습니다. 이것은 Linux에서 실행됩니다.

답변1

다음은 귀하가 요청한 대로 파일 이름을 (신중하게) 바꾸는 간단한 쉘 루프입니다.

d=$(date +%y%m%d-%y%m%d-%H%M%S)
for f in Abc_*.*.*.*_*.txt
do
  new=${f%_*}_${d}.csv
  [ ! -f "$new" ] && mv "$f" "$new"
done

먼저 작성한 형식으로 명명된 변수에 타임스탬프를 캡처합니다 d. 그런 다음 간단한 glob 형식을 반복하여 이름이 "Abc_"로 시작하는 모든 파일을 선택하고 마침표 세 개 사이의 모든 파일, 밑줄 및 기타 항목, 마지막으로 ".txt" 끝으로 끝나는 파일을 선택합니다.

마지막 밑줄(및 포함) 뒤의 모든 항목을 제거한 다음 타임스탬프( ${d})와 새 ".csv" 확장자를 추가하여 새 파일 이름을 계산합니다.

새 파일 이름이 다음과 같은 경우아니요존재하는 경우 파일 이름이 변경됩니다. [ ! -f "$new" ] &&기존 파일을 삭제하지 않으려면 이 섹션을 삭제하세요.

실제로 실행하기 전에 수행할 작업을 확인하려면 echobefore를 추가하세요.mv

내가 그것을 실행하면 다음이 표시됩니다.

$ touch Abc_10.11.76.112_001.txt Abc_192.168.1.164_001.txt Abc_54.78.1.1_002.txt
$ d=$(date +%y%m%d-%y%m%d-%H%M%S)
$ for f in Abc_*.*.*.*_*.txt; do new=${f%_*}_${d}.csv; [ ! -f "$new" ] && mv "$f" "$new"; done
$ ls -1
Abc_10.11.76.112_160913-160913-140649.csv
Abc_192.168.1.164_160913-160913-140649.csv
Abc_54.78.1.1_160913-160913-140649.csv

답변2

통과되면날짜 및 시간 스탬프, 파일 수정 시간을 의미하는 경우 zsh다음과 같이 할 수 있습니다.

zmodload zsh/stat
autoload zmv

zmv -n '(*_*_)*(.txt)' '$1$(zstat -F %FT%T%z +mtime -- $f)$2'

( -n실제로 이름을 바꾸려면 제거하세요)

심볼릭 링크된 파일 의 경우 .txt타임스탬프는 심볼릭 링크 자체의 수정 시간이 아니라 심볼릭 링크 대상의 수정 시간을 기반으로 합니다. 심볼릭 링크 자체의 수정 시간을 사용 -L하는 옵션을 추가합니다 .zstat

%FT%T%z명시적인 로컬 타임스탬프를 제공하세요 2016-09-13T17:32:17+0100. 예: 필요에 맞게 표준 형식을 사용할 수 있습니다 strftime()( 와 동일 date +<format>). 그러나 1초 미만의 정밀도는 지원 zsh되지 않습니다 zstat(수정 시간을 1초 미만의 정밀도로 저장하는 파일 시스템의 경우).

GNU 시스템을 사용하는 경우 date -r대신 GNU를 사용하여 zstat다음 나노초를 얻을 수 있습니다.

$ zmv -n '(*_*_)*(.txt)' '$1$(date -r $f +%FT%T.%N%z)$2'
mv -- Abc_192.168.1.164_001.txt Abc_192.168.1.164_2016-09-13T17:32:17.368805094+0100.txt

와 마찬가지로 zstat수정 시간이 필요합니다.표적심볼릭 링크 자체가 아니라 심볼릭 링크의 것입니다. date심볼릭 링크와 함께 mtime을 사용할 수 있는 옵션은 없지만 find대신 GNU를 사용할 수 있습니다.

관련 정보