是否有“pick”的改进版本可以处理带空格的文件名?

是否有“pick”的改进版本可以处理带空格的文件名?

是否有一个版本的选择脚本可以正确处理文件名中的空格?

这是一个棘手的问题 - pick 可以轻松增强以处理文件名中的空格,但输出只是文件名 - 没有指示填充名的开始或结束位置。

我的目标是能够说类似的话

for i in `pick .??*` ; do ... ; done

但据我所知,这是没有希望的。即使使用$()语法而不是反引号,如何使文件名从选择到处理保持完整?

我能想到的唯一接近的工具是xargs -0,它可以让我拥有任意名称 - 但我不知道如何与它交互,除了 from find -0

编辑:Pick 是一个脚本,它需要一堆文件,并询问您想要或不想要哪些文件。

http://examples.oreilly.de/english_examples/upt3/split/pick 样品。它并不复杂,但如果您不知道如何在 shell 脚本内重定向,或者以前从未见过该构造,那么这将是一个惊喜。

是的,它每行输出一个文件名。

答案1

如果pick每行输出文件名,您可以设置IFS为仅包含换行符。例如(在bash中):

saved_ifs=$IFS
IFS=$'\n'
for i in $(pick .??*) ; do ... ; done
IFS=$saved_ifs

这将允许您的文件名包含空格和制表符,当然如果它们包含换行符,仍然会出现问题。如果存在任何带有 glob 字符(例如*?)的文件名,您可能还需要考虑禁用 globbing。用于set -f禁用和set +f重新启用。

答案2

find -name "* *" -type f -exec rename 's/ /_/g' {} +

将文件名中的空格替换为“_”。

然后用挑。

理由:文件名中的空格通常被视为非标准文件命名约定。成功的 IT 就是每次都以同样的方式做事,这让人想起孙子兵法:仔细选择你的战斗。

相关内容