单个 bash 命令>| foo
创建一个空文件foo
,无论该文件之前是否为非空、空或丢失。(如果它是只读的或目录,则失败。)
是否有类似的单个命令来创建空目录?如果目录之前就在那里,它应该可以工作或不, 空的或不。大致相同rm -rf fooDir; mkdir -p fooDir
,但不违反“不要重复自己”。(如果目录或文件是只读的,失败是可以接受的。)
上下文是一个脚本,它创建一个目录来存储其输出,但会删除任何以前运行的输出。
答案1
我认为答案是:不。没有单一的命令可以满足你的要求,至少根据这两个链接:
- https://askubuntu.com/questions/517329/overwrite-an-existing-directory
- https://stackoverflow.com/questions/23698183/how-to-force-cp-to-overwrite-directory-instead-of-creating-another-one-inside
我只能说,只需使用两个单独的命令即可。虽然这可能很丑陋且“不方便”,但 99% 可能是唯一的方法。
答案2
首先,找到一个空目录。没有普遍的这样做的方法有很多,但您可以自己制作一个,或者使用 找到可能的候选者find /var -type d -empty | xargs ls -ltd
。例如,在 Ubuntu 14 上,/var/lib/ntpdate
多年来一直空置。另一个安全的选择是/etc/ppp/resolv
。
然后单个命令是rsync -a --delete /var/lib/ntpdate/ fooDir
。尾部斜杠很重要。不幸的是,如果没有通用的/dev/nullDir
,这个解决方案可能会让新手感到困惑。因此,如果您的脚本必须多次执行此操作,那么首先创建然后将其与 rsync 一起使用是值得的/tmp/emptyDir
。