
單一 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
,這個解決方案可能會讓新手感到困惑。因此,如果您的腳本必須多次執行此操作,那麼首先創建/tmp/emptyDir
它然後將其與 rsync 一起使用是值得的。