2017-06-23 66 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 
相关问题