파일 이름에 수정된 날짜를 삽입하는 경우 - 2가지 경우

파일 이름에 수정된 날짜를 삽입하는 경우 - 2가지 경우

두 가지 별도의 질문을 하게 될 것 같지만 맥락은 동일하므로 괜찮기를 바랍니다.

아래에 제시된 몇 가지 프로세스의 출력이 있습니다(수정할 수 없음).

25978.csv
26044.csv
26865.csv
26914.csv
27013.csv

이 입력을 통해 내가 달성하려는 것은 파일 이름에 날짜를 삽입하거나 해당 파일 이름을 대체하는 '간단한 작업'입니다. 원하는 날짜는 일반적으로 마지막 수정 날짜에 해당하므로 oneliner로 이름을 바꿀 수 있습니다 for f in *.csv; do mv -- "$f" "$f-$(date +%Y%m%d -r "${f}")"; done. 때로는 마지막으로 수정된 날짜가 내가 찾는 날짜와 하루 차이가 나는 경우가 있으므로 해당 숫자 값을 줄이는 쉬운 방법(oneliner?)이 있는지 궁금합니다(예: 20160506을 20160505로 변환).

20150506.csv
20150507.csv
20150508.csv
20150509.csv
20150510.csv

두 번째 경우. 마지막 수정 날짜는 완전히 부정확하므로 유용하지 않습니다. 그러나 파일 이름의 숫자는 예상 날짜와 함께 증가합니다. 파일 이름에 숫자 값을 삽입하고 각 후속 파일에 대해 동일한 값이 1씩 증가하도록 할 수 있습니까? 내가 무엇을 성취하려고 하는지 아시겠어요? 난 그냥 방법을 모르겠어요;) ...

편집하다 내 질문에 대한 답변을 찾았습니다.여기- 좀... 그냥 못쓰는 것 아닐까요?

cnt=0
for i in *; do
  let cnt=cnt+1
  mv "$i" "$(echo "${i}_${cnt}" | awk -F_ '{print $1"_"$3}')"
done

필요에 따라 수정하는 방법을 알고 있지만 결국 '증가가 작동하지 않습니다'와 같이 모든 파일에 대해 출력이 동일합니다. 위의 코드를 로 저장하고 rename.sh에 의한 실행을 허용한 것을 기억했지만 chmod 755 rename.sh여전히 아무 것도 나오지 않았습니다...

답변1

내 질문에 대답하는 것이 범죄가 아니기를 바랍니다. 부분적인 해결책을 찾았습니다.Ask우분투-적어도 첫 번째 경우에는 저에게 효과적입니다.

touch -d "$(date -R -r filename) - 2 hours" filename

하위 폴더의 모든 파일을 수정하려면 다음을 입력하십시오.

find DIRECTORY -print | while read filename; do
    # do whatever you want with the file
    touch -d "$(date -R -r "$filename") - 2 hours" "$filename"
done

관련 정보