2017-06-23 94 views
1

我還挺有一種感覺,有一些方法來在單個命令如下事情:我可以刪除目錄,然後在單個命令中創建目錄嗎?

rm -rf folder_name

mkdir folder_name

這可能嗎?

+1

是'RM ..; mkdir ..'(也就是說,使用[command sequence](https://unix.stackexchange.com/questions/184493/consecutive-commands))是不夠的?這些通常是兩個不同的行爲 - 因此是兩個不同的命令。或者,只需刪除目錄的*內容*,但對inode有不同的影響,可能是權限。 – user2864740

+1

剛剛用'rm -rf folder_name/*'刪除內容怎麼樣? –

回答

2

不,沒有標準的工具(雖然沒有什麼能阻止你從編寫這樣的野獸)。

的常用方法做這樣的事情是有一個條件序列:

rm -rf folder_name && mkdir -p folder_name 

這將做rm,然後,只要它返回成功,使目錄重新。

一個你如果你想要一個簡單的「命令」可以做的事情是把它放在一個函數:

remakedir() 
{ 
    [[ -n "$1" ]] && rm -rf "$1" && mkdir -p "$1" 
} 

然後一些簡單的測試表明它在行動:

pax> remakedir /tmp/xyzzy ; touch /tmp/xyzzy/plugh1 ; ls -al /tmp/xyzzy 
total 8 
drwxrwxr-x 2 pax pax 4096 Jun 23 09:29 . 
drwxrwxrwt 10 root root 4096 Jun 23 09:29 .. 
-rw-rw-r-- 1 pax pax  0 Jun 23 09:29 plugh1 

pax> remakedir /tmp/xyzzy ; touch /tmp/xyzzy/plugh2 ; ls -al /tmp/xyzzy 
total 8 
drwxrwxr-x 2 pax pax 4096 Jun 23 09:29 . 
drwxrwxrwt 10 root root 4096 Jun 23 09:29 .. 
-rw-rw-r-- 1 pax pax  0 Jun 23 09:29 plugh2 
+0

請注意,這將刪除當前目錄中的所有內容,這意味着如果當前內容大小可用,則可以在刪除運行時注入新項目,從而導致操作不穩定時間過長。 – ChuckCottrill

1

Posix沒有一個可以做你想做的事情的命令。但是,以下內容將(大部分)完成您想要的內容(減少目錄缺失和/或不可用時的時間窗口)。

建立一個臨時目錄(保存你即將刪除的東西)。

delete=`mktemp -d ./delete.XXXXXX` 
folder="folder_name" 

將現有的文件夾移到一邊(以便以後刪除)。這是 '關鍵部分',

mv ${folder} ${delete}/ && mkdir ${folder} 

然後刪除(先前)存在於您的方便,

if [ -d ${folder} ] ; then rm -rf ${delete}/; fi 
相關問題