我正在寻找类似的东西:
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”开头时才运行命令行。