例如,现在我正在使用以下命令来更改几个文件,这些文件的Unix路径是我写到一个文件中的:

cat file.txt | while read in; do chmod 755 "$in"; done

有没有更优雅、更安全的方式?


当前回答

Yes.

while read in; do chmod 755 "$in"; done < file.txt

这样可以避免cat过程。

对于这种目的,猫几乎总是不好的。你可以阅读更多关于无用的猫。

其他回答

Yes.

while read in; do chmod 755 "$in"; done < file.txt

这样可以避免cat过程。

对于这种目的,猫几乎总是不好的。你可以阅读更多关于无用的猫。

这一逻辑也适用于许多其他目标。 如何从/home/文件系统中读取每个用户的.sh_history ?如果有上千个呢?

#!/bin/ksh
last |head -10|awk '{print $1}'|
 while IFS= read -r line
 do
su - "$line" -c 'tail .sh_history'
 done

下面是脚本https://github.com/imvieira/SysAdmin_DevOps_Scripts/blob/master/get_and_run.sh

如果你有一个很好的选择器(例如所有的。txt文件都在一个目录下) 你可以这样做:

for i in *.txt; do chmod 755 "$i"; done

Bash for循环

或者是你的变种:

while read line; do chmod 755 "$line"; done < file.txt

如果您想为每一行并行运行命令,可以使用GNU parallel

parallel -a <your file> <program>

文件的每一行都将作为参数传递给程序。默认情况下,并行运行与cpu数量相同的线程。但是你可以用-j来指定它

如果你知道你在输入中没有任何空白:

xargs chmod 755 < file.txt

如果路径中可能有空格,如果你有GNU xargs:

tr '\n' '\0' < file.txt | xargs -0 chmod 755