我可以(重定向)文本输出以/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
非常简单,您不必重新编辑任何内容(我认为“编辑”并不是您的意思维护或者减少行数,因为以“更简单的维护”的名义以一种尴尬的、黑客的或不正确的方式做某事——或者更糟糕的是,伪聪明——是矛盾的)。
也就是说,您可以通过每小时运行一次这样的 cron 作业来相当轻松地实现自己的垃圾目录:
garbage_dir=/usr/local/garbage
for file in $garbage_dir/*; do
rm -f -R $file;
done
答案2
我认为您只是在寻找/tmp
目录。在大多数情况下,您放置在其中的任何内容都会在下次重新启动时被删除。详细信息取决于您的特定操作系统并受变量值的控制$TMPTIME
。对于许多发行版,默认设置是清除/tmp
每次启动,因为$TMPTIME
设置为 0。在大多数(如果不是全部)发行版中,这是在文件 中设置的/etc/default/rcS
。
所以,只需做这样的事情(注意我正在使用 shell globbing 和不是解析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