Bash
有沒有改進的“pick”版本可以處理帶空格的文件名?
是否有一個版本的選擇腳本可以與文件名中的空格一起正常工作?
這是一個棘手的問題——pick 對文件名中的空格進行增強是微不足道的,但輸出只是文件名——沒有指示填充名開始或結束的位置。
我的目標是能夠說類似的話
for i in `pick .??*` ; do ... ; done
但據我所知,那是沒有希望的;即使使用
$()
語法而不是反引號,您如何使文件名從選擇到處理完好無損?我能想到的唯一接近的工具是
xargs -0
,它可以讓我有任意名稱——但我不知道如何與它互動,除了 fromfind -0
。編輯: Pick 是一個腳本,它需要一堆文件,並詢問您想要或不想要哪些文件。
有關範例,請參見 http://examples.oreilly.de/english_examples/upt3/split/pick 。這並不復雜,但是如果您不知道如何在 shell 腳本中重定向,或者以前從未見過該結構,那將是一個驚喜。
是的,它每行輸出一個文件名。
如果
pick
每行輸出文件名,則可以設置IFS
為僅包含換行符。例如(在 bash 中):saved_ifs=$IFS IFS=$'\n' for i in $(pick .??*) ; do ... ; done IFS=$saved_ifs
這將允許您的文件名包含空格和製表符,當然如果它們包含換行符,仍然會有問題。如果有任何文件名帶有 glob 字元(例如
*
或?
),您可能還需要考慮禁用 globbing。用於set -f
禁用和set +f
重新啟用。
find -name "* *" -type f -exec rename 's/ /_/g' {} +
用“_”替換文件名中的空格。
然後使用挑選。
*理由:*文件名中的空格通常被認為是非標準的文件命名約定。成功的 IT 就是每次都以同樣的方式做事,讓人想起孫子的兵法:謹慎選擇戰鬥。