/dev/null 类似文件移动的自动垃圾目录?

/dev/null 类似文件移动的自动垃圾目录?

我可以(重定向)文本输出以/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

相关内容