是否有一个版本的选择脚本可以正确处理文件名中的空格?
这是一个棘手的问题 - 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 就是每次都以同样的方式做事,这让人想起孙子兵法:仔细选择你的战斗。