是否有一行命令可以使 chmod 交互?

Har*_*vey 24 linux bash command-line

我正在寻找类似的东西:

ls | ask_yes_no_for_each_file | chmod +x the_files_approved
Run Code Online (Sandbox Code Playgroud)

或类似的语法。

也可以处理您想要单独确认的其他命令。

Joh*_*024 45

这可以满足您的要求:

find . -maxdepth 1 -type f -print0 | xargs -L1 -p0 chmod +x
Run Code Online (Sandbox Code Playgroud)

这使用find而不是ls因为通常解析ls输出是不可靠的find但是,即使文件名包含换行符或其他困难字符,这种形式也可以使用 。

解释

  • find . -maxdepth 1 -type f -print0

    这将选择文件。这可以使用 find 的许多选项中的任何一个进行自定义。该选项print0告诉find在空分隔列表中打印文件名。这是传输文件名列表的唯一可靠方法。

  • xargs -L1 -p0 chmod +x

    这需要由生成的文件名的空分隔列表find并将您的命令应用于它们。

-L1选项告诉xargs您一次只处理一个文件名。该-p选项告诉xargs在继续之前提示批准。该-0选项告诉xargs使用空字符作为文件名之间的分隔符。

[在@kwan 指出之前,我不知道该-p选项xargs。]


小智 25

您可以使用xargs.

例如:

ls|xargs -I path -p chmod +x path
Run Code Online (Sandbox Code Playgroud)

选项-p提示用户是否运行每个命令行并从终端读取一行。仅当响应以“y”或“Y”开头时才运行命令行。

  • [不要解析`ls`。](http://mywiki.wooledge.org/ParsingLs) (21认同)