Bash
萬用字元擴展
我不太確定如何表達這一點,也許這就是我找不到任何東西的原因,但我想重用命令中萬用字元列舉的值。這可能嗎?
設想:
$ ls /dir 1 2 3
/dir 的內容是目錄 1、2 和 3。
$ cp /dir/*/file .
導致文件從 /dir/1 /dir/2 和 /dir/3 複製到此處。
我想做的是將文件複製到基於萬用字元擴展的新目標名稱。
$ cp /dir/*/file ???-file
將導致 /dir/*/file 被複製到 1-file、2-file 和 3-file。我想不通的是???
告訴 Bash 我想使用萬用字元擴展值的部分。在目標中使用萬用字元會導致
cp
錯誤:cp: target `*-file' is not a directory.
Bash 中還有其他可以在這裡使用的東西嗎?
該
find
命令必須{}
使用-exec
which 類似於我在上面尋找的內容。
ls /dir |while read dirname; do cp -v /dir/"$dirname"/file "$dirname"-file ; done
我的第一個想法是你可能把這個問題弄得太複雜了。不過,是可以解決的。
你可以用一個瘋狂的 bash 循環來做這樣的事情:
for i in /dir/*/file do j=${i%/file} k=${j#/dir/} cp $i %k-file done
它使用幾個 bash字元串運算符來提取源目錄的編號。
我保證有更好的方法來做到這一點,這就是我想到的。