AディレクトリからBディレクトリにファイルを移動したいです。しかし、いくつかの条件があります。
ディレクトリA構造:
a.txt_20170502
b.txt_20170502
a.txt_20170507
asd.txt_20170509
asd.txt_20170522
a.txt_20170502
そのため、ファイル名を変更してa.txt
Bディレクトリに移動したいのですが、a.txt
Bディレクトリにそのファイルがある場合、ファイルは移動されません。
例:
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_*
。A
pathをpathに置き換えて、B
ファイル名の後に続くサフィックスを削除して新しいファイルパスを設定します。_xxxxxxxx
新しいファイル名が下にまだない場合、B
ファイルはその場所に移動されます。
答え2
以下を使用して存在をテストできます。
if [!-f B/a.txt]
then
mv a.txt_20170502 B/a.txt
fi
a.txt_20170502
そしてa.txt
スクリプトで使用される変数に置き換える必要があります。