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

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

我正在寻找类似的东西:

ls | ask_yes_no_for_each_file | chmod +x the_files_approved

或者类似的语法。

还可以执行您需要单独确认的其他命令。

答案1

这就是你想要的:

find . -maxdepth 1 -type f -print0 | xargs -L1 -p0 chmod +x

这里使用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

答案2

您可以使用xargs

例如:

ls|xargs -I path -p chmod +x path

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

相关内容