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

问题描述

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

xyz

是否有单行命令来循环文件中的文件路径并为每个文件路径qwe设置权限?

解决方法

使用xargs

xargs -d '\n' chmod 644 < /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 -- "${2}"; }
mapfile -t -c1 -C 'cm' < /var/tmp/sample

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

,

另一种使用 xargs 的方法:

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

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

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