ワイルドカードファイルの移動とタイムスタンプの追加

ワイルドカードファイルの移動とタイムスタンプの追加

要件は、ファイルをソースからアーカイブフォルダに移動し、タイムスタンプを追加することです。次のスクリプトを生成しましたが、ワイルドカードに渡す日付は移動されません。

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

(すべてのコードはテストされていません。)

関連情報