파일 이름에 수정 시간 추가

파일 이름에 수정 시간 추가

파일의 생성 날짜와 파일 이름을 추가해야 합니다. 예를 들어 Test 파일의 생성 날짜가 2017년 3월 22일이라면 test_rbc_22032017로 변경해야 합니다. 개별 파일에 대해 작업을 수행할 수 있지만 지정된 디렉터리에서 n개 파일의 이름을 변경하는 스크립트를 만드는 방법을 잘 모르겠습니다. 다음을 시도했지만 운이 없었습니다.

for f in /path ; do mv -n ""$f"_RBS_(date -r "$f" +"%Y%M%D")"; done

하지만 행운은 없습니다. 해결책을 제안해주세요

답변1

명령에 몇 가지 문제가 있습니다.

for f in /path ; do mv -n ""$f"_RBS_(date -r "$f" +"%Y%M%D")"; done
  • for f in /path한 번만 반복됩니다( f= 사용 /path). 아마도 디렉터리의 모든 파일을 for f in /path/*고려 하고 싶을 것입니다 (하위 디렉터리의 파일을 고려하려는 경우 이는 또 다른 질문입니다)./path/

  • mv두 개의 매개변수가 필요합니다. 출처는 분명히 입니다 "$f". 대상은 변환된 이름이어야 합니다.

  • $명령 대체 에서 뭔가를 놓쳤습니다 $(...).

  • 형식 문자열이 date설명과 일치하지 않습니다(분과 간단한 날짜가 아닌 월과 일을 원할 수 있음).

  • 생성 날짜가 아닌 수정 날짜를 사용하고 있습니다. 생성 날짜는 대부분의 파일 시스템 유형에서 유지되지 않습니다. 그대로 두겠습니다.

  • 귀하의 설명은 파일 이름을 소문자로 만들고 싶다는 것을 의미합니다.

위의 사항을 수정한 후(사용할 날짜를 선택하는 것 외에) 우리는 다음과 같이 끝납니다.

for f in /path/* ; do mv -n "$f" "${f,,}_rbc_$(date -r "$f" +'%d%m%Y')"; done

고려해야 할 또 다른 사항은 동일한 위치에서 이 작업을 여러 번 수행하는 경우 파일을 다른 디렉터리로 이동하거나 이미 적절한 접미사가 있는지 테스트해야 할 수도 있다는 것입니다(새 접미사를 추가하기 전에 제거). 이 파일을 변경하지 않고 그대로 두세요).

답변2

첫 번째는 mv명령에 소스와 대상이 필요하므로 하나만 제공하면 된다는 것입니다.

다음은 연도에 %Y, 월에 %m, 일에 %d를 원하는 정보를 기반으로 하는 날짜 형식입니다. man date시퀀스 간의 차이점에 대한 설명은 참조를 참조하세요.

for f in /path세 번째 요점은 참조 파일( )이 아닌 경로( )만 제공한다는 것입니다 for f in /path/*. 따라서 유효한 예는 다음과 같습니다.

for f in /path/*; do mv -n "$f" "${f}_$(date -r "$f" +'%Y%m%d')"; done

답변3

이것을 시도해보고 상황에 맞게 조정하십시오. now=$(date +"%m_%d_%Y") file="/nas/backup_$now.sql"

그래서 작동해야합니다 :for f in /path ; do mv -n "$f" "${f}_RBS_$(date +"%m_%d_%Y")"; done

답변4

이것이 가장 좋은 방법입니다.

다음 스크립트는 주어진 디렉터리에 있는 n개의 파일에 대한 파일 생성 날짜를 추가하는 데 사용됩니다.

#!/bin/bash

path="/home/modassir/data/"
listoffiles=$(ls -1 /home/modassir/data)


for f in $listoffiles; do
   file=$(date -r $path$f +'%d%m%Y-%H:%M:%S')
   mv $path''$f'' $path''$f''_rbc_''$file''
done;

/home/modassir/data디렉토리 이름입니다

관련 정보