サフィックスが異なる別のファイルがある場合にのみファイルを移動する

サフィックスが異なる別のファイルがある場合にのみファイルを移動する

スクリプトは完了する前に完了します。ファイルは、初期入力ファイルセットから異なるサフィックスを持つ出力ファイルとして生成されます。

ファイル1.ext - >ファイル1.oxt

(与えられた拡張子は任意です.)

初期スクリプトを再実行する前に、出力ファイルがすでに存在する別のディレクトリに入力ファイルのみを移動できますか? 「basename(file).oxt が存在する場合にのみ mv ファイルを生成します」のようなものです。これは他の言語でも行うことができますが、Bashの知識が非常に欠けています。

ありがとうございます!

答え1

これはBashスクリプトです:

for file in `ls *.old`
do
    BASE="${file%.*}"
    if [[ -e ${BASE}.new ]]
    then
        mv $file /yourdir/
    fi
done

.old と .new をサフィックスに置き換え、 yourdir を物理ディレクトリに置き換えます。

答え2

探す+強く打つ解決策:

find . -type f ! -name "*.oxt" -exec bash -c 'f=$1; 
        fp="${f%.*}"; [[ -f "$fp.oxt" ]] && mv "$f" dest_dir/' _ {} \;

  • f=$1- フルファイルパス

  • fp="${f%.*}"- 拡張子が削除されたファイルパス(拡張子なし)

  • [[ -f "$fp.oxt" ]]- 対応する「出力」ファイルがあることを確認してください。

  • mv "$f" dest_dir/- 初期ファイルをdest_dirディレクトリに移動

関連情報