あるディレクトリから別のディレクトリにuniqファイルのみを移動する[閉じる]

あるディレクトリから別のディレクトリにuniqファイルのみを移動する[閉じる]

AディレクトリからBディレクトリにファイルを移動したいです。しかし、いくつかの条件があります。

ディレクトリA構造:

a.txt_20170502 
b.txt_20170502
a.txt_20170507
asd.txt_20170509
asd.txt_20170522

a.txt_20170502そのため、ファイル名を変更してa.txtBディレクトリに移動したいのですが、a.txtBディレクトリにそのファイルがある場合、ファイルは移動されません。

例:

a.txt
asd.txt

このプロセスは、すべての候補ファイルがディレクトリAからBに移動するまで続きます。

ファイルがすでにディレクトリにあるかどうかを確認する方法は混乱しています。ファイルは移動されません。

健康状態:- ディレクトリ B からデータをインポートする別のスクリプトがバックグラウンドで実行されています。したがって、ディレクトリBにファイルがあると、自動的にメインフレームサーバーにコピーされます。

答え1

for file in A/*.txt_*; do
  newfile="B/${file##*/}"  # remove A path, add B path
  newfile="${newfile%_*}"  # remove trailing suffix

  if [[ ! -f "$newfile" ]]; then
    mv "$file" "$newfile"
  fi
done

Aこれは一致するすべてのファイルを繰り返します*.txt_*Apathをpathに置き換えて、Bファイル名の後に続くサフィックスを削除して新しいファイルパスを設定します。_xxxxxxxx新しいファイル名が下にまだない場合、Bファイルはその場所に移動されます。

答え2

以下を使用して存在をテストできます。

if [!-f B/a.txt]
then
  mv a.txt_20170502 B/a.txt
fi

a.txt_20170502そしてa.txtスクリプトで使用される変数に置き換える必要があります。

関連情報