수정된 타임스탬프 덮어쓰기

수정된 타임스탬프 덮어쓰기

현재 디렉터리의 파일이 타임스탬프로 수정되도록 하려면 이 작업을 수행해야 합니다. 처음에는 잘 작동하지만 다시 실행하면 파일에 다른 타임스탬프가 추가됩니다. 타임스탬프를 추가하는 것이 아니라 교체하는 방법이 필요합니다.

#!/bin/sh
IFS='
'

time=$(date)

for file in *
do
     mv $file "$file""$time"
done

오래된 파일을 어떻게 덮어쓸지 고민 중인데, 타임스탬프로 수정하면 이름이 바뀌기 때문에 방법이 떠오르지 않습니다.

답변1

파일 이름에서 날짜의 현재 부분을 바꾼 다음 이를 바꿔야 합니다. 이는 파일 이름의 기본 이름 부분을 구문 분석하는 직접적인 문자열 조작 활동입니다. 현재 명명 규칙에 대한 자세한 정보가 없으면 수행할 작업에 대한 일반적인 접근 방식 외에는 실제로 어떤 솔루션도 제공될 수 없습니다.

파일 이름이 다음과 같다고 가정합니다.잠깐_..날짜..

for file in *
do

  basefile=${file/_*//}
  mv "$file" "$basefile""$time"
done

그 이후의 모든 내용을 _잘라내어 $basefile.

이름

$ echo "$file"
blah_Sun Oct 27 15:20:58 EDT 2013

$ echo ${file/_*//}
blah/

답변2

한 가지 방법은 동일한 디렉터리에 있는 파일의 원본 파일 이름을 유지하는 것입니다. for 루프에서 파일을 읽는 대신 다음 while 루프를 사용하여 파일 이름을 읽고 이름에 타임스탬프를 추가할 수 있습니다.

while read file                                                                                                                                                                    
do                                                                                                                                                                                 
  mv $file$(date)                                                                                                                                                                  
done < "files.txt"

files.txt예를 들어 에서 생성할 수 있으며 ls > files.txt실제 스크립트 또는 명령줄에서 별도의 스크립트를 실행하기 전에 이 명령을 한 번만 실행해야 합니다.

관련 정보