更改文件中多个文件路径的文件权限

Change file permission for multiple file paths in a file

我有一个文件,在文件内容中存储了多个文件路径,例如:

$ cat /var/tmp/sample
/etc/ssl/example/ssl-test1.cert
/etc/ssl/example/ssl-test2.cert
/etc/ssl/example/ssl-test3.cert
...

是否有单行命令循环文件中的文件路径并为每个文件路径设置权限chmod 644 <file paths in /var/tmp/sample>

编辑:使用xargs -a /var/tmp/sample -d '\n' chmod 644


您可以逐行阅读文件

while read -r filen; do
    chmod 644 -- "${filen}"
done < /var/tmp/sample

如果必须只有一行

while read -r filen; do chmod 644 -- "${filen}"; done < /var/tmp/sample

当文件名包含换行符时,这会出现问题。


不要这样做,但是如果出于某种原因你不想使用while/read,你可以这样做

chmod 644 -- $(</var/tmp/sample)

如果文件名中有任何空格,这将中断。

您不应该但可以做的另一件事是使用内置的 mapfile。

cm(){ chmod 644 -- ""; }
mapfile -t -c1 -C 'cm' < /var/tmp/sample

mapfile 并非真正为此目的而设计,因此它可能比仅使用 xargs 慢很多。

您可以运行以下命令更改所有文件的权限。

for i in `cat /var/tmp/sample`; do chmod 644 $i;done

使用xargs.

xargs -d '\n' chmod 644 < /var/tmp/sample

另一种使用 xargs 的方法:

cat /var/tmp/sample | xargs -d '\n' chmod 644