Bash

有沒有改進的“pick”版本可以處理帶空格的文件名?

  • October 5, 2014

是否有一個版本的選擇腳本可以與文件名中的空格一起正常工作?

這是一個棘手的問題——pick 對文件名中的空格進行增強是微不足道的,但輸出只是文件名——沒有指示填充名開始或結束的位置。

我的目標是能夠說類似的話

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

但據我所知,那是沒有希望的;即使使用$()語法而不是反引號,您如何使文件名從選擇到處理完好無損?

我能想到的唯一接近的工具是xargs -0,它可以讓我有任意名稱——但我不知道如何與它互動,除了 from find -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 就是每次都以同樣的方式做事,讓人想起孫子的兵法:謹慎選擇戰鬥。

引用自:https://unix.stackexchange.com/questions/159287