파일의 생성 날짜와 파일 이름을 추가해야 합니다. 예를 들어 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
디렉토리 이름입니다