Skip to content

[Linux]修复从Windows拷贝的文件权限

十一月 4, 2016

最近有友人M询问我如何修复Linux下从M$ Windows系统拷贝来的文件权限,我们知道从windows拷贝来的文件很多时候可能会出现权限错误(自动变成777),这主要是因为windows的权限系统 (ACL, access control list)与linux本身的权限系统不兼容。这自然会让强迫症的朋友们感觉很不爽(自然也不安全)。

对于文件而言我们一般会希望默认设置为644(rw-r–r–),而对于文件夹而言我们会希望其变成755(rwxr-xr-x),然而,如果仅仅利用chmod来进行操作的话,需要递归的访问所有的目录,如果对于大量文件/文件夹而言的话,自然不是很方便,所以其实可以利用find的功能,把找到的文件管道给chmod。

拍脑袋的想法大概会是:

find * -type f | xargs chmod 644

这个对于比较规范的文件自然没有问题,但是如果windows下的文件名里面有些newline字符的话(最常见的是空格),上述的命令就可能没用了,因为find命令的输出默认分隔符是newline, 所以如果文件名里面混有这类字符的话,就会被认为是被newline分割的多个文件名,从而找不到相应的文件。

因此,可以试着利用 -print0(这个是数字零)参数,把find命令的默认输出分隔符变成null字符,相应的xargs 命令也需要加入 -0 参数来解释管道送过来的文件名:

find * -type f -print0 | xargs -0 chmod 644

一般就没问题了,同理,对于文件夹也可以采用:

find * -type d -print0 | xargs -0 chmod 755

来解决。

Advertisements
One Comment leave one →
  1. 十一月 20, 2016 11:19 上午

    Stop using Windows!

发表评论

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 更改 )

Twitter picture

You are commenting using your Twitter account. Log Out / 更改 )

Facebook photo

You are commenting using your Facebook account. Log Out / 更改 )

Google+ photo

You are commenting using your Google+ account. Log Out / 更改 )

Connecting to %s

%d 博主赞过: