요구 사항은 파일을 소스에서 보관 폴더로 이동하고 타임스탬프를 추가하는 것입니다. 다음 스크립트를 생성했지만 와일드카드로 전달하는 날짜는 이동되지 않습니다.
File name: Test_20100101.txt
sourcedir=/projects/source
archivedir=/projects/archive
FILE="$1"
for file in $1; do
fileroot=$1
mv -i "$sourcedir/$1"* "$archivedir/$1_$(date +"%Y%m%d_%H%M%S")"
done
실행할 때 다음과 같은 스크립트를 실행 중입니다.
./archfiles.sh Test_
그러나 출력은 다음과 같습니다
Test__20200107_092902
실제 출력은
Test_20100101_20200107_092902.txt
이 문제를 해결하는 데 도움을 주실 수 있나요?
답변1
for
루프 변수를 사용하지 않을 때 루프를 사용해도 아무런 의미가 없습니다 file
. 와일드카드 확장으로 파일을 하나씩 처리하려면 for
루프 본문이 아닌 명령문에 와일드카드를 사용해야 합니다.
(문제의 코드를 수정한 것 같습니다.와일드카드를 사용하여 파일 복사 및 타임스탬프 추가이해하지 못했습니다. )
파일이 다른 디렉토리에 있는 경우 $sourcedir
(1) $sourcedir
와일드카드를 사용하여 지정하거나 (2) 현재 디렉토리를 $sourcedir
.
예시 1:
for file in "$sourcedir/$1"*
do
base="${file##*/}"
mv -i "$sourcedir/$base" "$archivedir/${base}_$(date +"%Y%m%d_%H%M%S")"
done
예 2( sourcedir
및 archivedir
가 절대 경로라고 가정):
cd "$sourcedir"
for file in "$1"*
do
mv -i "$file" "$archivedir/${file}_$(date +"%Y%m%d_%H%M%S")"
done
(모든 코드는 테스트되지 않았습니다.)