
テキスト出力を(リダイレクト)して/dev/null
削除できます。 bashコードで簡単に有効/無効にできるので非常に便利です。
これで、ファイルを処理して処理した後に別のターゲットに移動するスクリプトがあります。簡単な例は次のとおりです。
source_dir=some/source/path
target_dir=some/target/path
for f in `ls $source_dir`; do echo $f; mv $f $target_dir; done
もはやファイルをターゲットディレクトリに移動することに興味がなく、むしろファイルの方向を削除することにした場合、これを行う最も効率的な方法は何ですか(編集されたコード行の点で)。
mv
コマンドを変数に入れることも検討できます。
process_cmd=echo
finnish_cmd=mv
source_dir=some/source/path
target_dir=some/target/path
for f in `ls $source_dir`; do $process_cmd $f; $finnish_cmd $f $target_dir; done
その後、次のように変更できます。
process_cmd=echo
finnish_cmd=rm
source_dir=some/source/path
target_dir=
for f in `ls $source_dir`; do $process_cmd $f; $finnish_cmd $f $target_dir; done
しかし、最終的に自動的にクリーンアップされるゴミのようなターゲットディレクトリを指定できればもっと簡単になると思います/dev/null
(これがコマンドrm
の意味です)。mv
process_cmd=echo
finnish_cmd=mv
source_dir=some/source/path
target_dir=/dev/null # <--- is there some sort of trash folder for such tasks?
for f in `ls $source_dir`; do $process_cmd $f; $finnish_cmd $f $target_dir; done
このような状況に対する明確なアプローチ/一般的なベストプラクティスはありますか?
答え1
そのような場所がないのには非常に簡単な理由があります。無駄がないからです。世界中で使用できますmv
がrm
。したがって、/dev/null
それは欲求を満たすために存在するものであり、欲求/dir/garbage
を満たさずに存在するものではない。
もちろん、この場合、「これを達成するための最も効率的な方法は何ですか(編集されたコード行の側面から)?」という質問を解決する必要があると主張できます。削除されtarget_dir
た定義は次のとおりです。
if [ -n "$target_dir" ]; then
# move file
else
# delete file
fi
非常にシンプルで、何も再編集する必要はありません。 (私の考えでは、「編集」はあなたの意味ではないようです。維持するあるいは、「より簡単なメンテナンス」という名前で厄介で、悪い、誤った方法で(より悪くは医者が賢く)何かを行うことは矛盾しているので、行数を減らしてください。
つまり、1時間ごとに次のcronジョブを実行して、独自のごみ箱ディレクトリをかなり簡単に実装できます。
garbage_dir=/usr/local/garbage
for file in $garbage_dir/*; do
rm -f -R $file;
done
答え2
/tmp
私はあなたがただディレクトリを探していると思います。ほとんどの場合、ここに入力した内容は次回の再起動時に削除されます。詳細は特定のオペレーティングシステムによって異なり、変数の値によって制御されます$TMPTIME
。多くのディストリビューションの場合、設定はゼロなので、デフォルト設定は/tmp
すべてのブートをクリアすることです。$TMPTIME
すべてではありませんが、ほとんどのディストリビューションではこれがファイルに設定されています/etc/default/rcS
。
したがって、次のようにしてください。いいえ分析ls
):
process_cmd=echo
finish_cmd=mv
source_dir=some/source/path
target_dir=/tmp
for f in $source_dir/*; do $process_cmd "$f"; $finish_cmd "$f" $target_dir; done