와일드카드 파일 이동 및 타임스탬프 추가

와일드카드 파일 이동 및 타임스탬프 추가

요구 사항은 파일을 소스에서 보관 폴더로 이동하고 타임스탬프를 추가하는 것입니다. 다음 스크립트를 생성했지만 와일드카드로 전달하는 날짜는 이동되지 않습니다.

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( sourcedirarchivedir가 절대 경로라고 가정):

cd "$sourcedir"
for file in "$1"*
do
    mv -i "$file" "$archivedir/${file}_$(date +"%Y%m%d_%H%M%S")"
done

(모든 코드는 테스트되지 않았습니다.)

관련 정보