要件は、ファイルをソースからアーカイブフォルダに移動し、タイムスタンプを追加することです。次のスクリプトを生成しましたが、ワイルドカードに渡す日付は移動されません。
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
。ワイルドカード拡張でファイルを1つずつ処理するには、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
(すべてのコードはテストされていません。)