나는 두 가지 별도의 질문을 하고 있다고 생각하지만 맥락은 동일하므로 괜찮기를 바랍니다.
아래와 같이 여러 프로세스의 출력이 있습니다(수정할 수 없음).
25978.csv
26044.csv
26865.csv
26914.csv
27013.csv
이 입력을 통해 내가 달성하려는 것은 파일 이름에 날짜를 삽입하거나 바꾸는 "간단한 작업"입니다. 필요한 날짜는 일반적으로 마지막 수정 날짜에 해당하므로 for f in *.csv; do mv -- "$f" "$f-$(date +%Y%m%d -r "${f}")"; done
oneliner를 사용하고 이름을 바꿀 수 있습니다. 때로는 마지막으로 수정된 날짜가 내가 찾고 있는 날짜와 하루가 다른 경우가 있으므로 해당 값을 줄이는 쉬운 방법(oneliner?)이 있는지 궁금합니다(예: 20160506을 20160505로 변환).
20150506.csv
20150507.csv
20150508.csv
20150509.csv
20150510.csv
두 번째 경우. 마지막으로 수정된 날짜는 완전히 부정확하므로 쓸모가 없습니다. 하지만 파일 이름의 숫자는 예상 날짜에 따라 증가합니다. 파일 이름에 숫자 값을 삽입하고 각 후속 파일에 대해 동일한 값을 하나씩 추가할 수 있습니까? 내가 달성하려는 것이 무엇인지 이해합니까? 난 그냥 무엇을 해야할지 모르겠어요;) ...
편집하다 내 질문에 대한 답을 찾았습니다여기- 좀... 그냥 못쓰는 것 아닐까요?
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
내 질문에 대답하는 것이 범죄가 아니길 바랍니다. 해결책의 일부를 찾았습니다.우분투에 물어보세요-적어도 첫 번째 경우에는 저에게 효과적입니다.
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