Bash

萬用字元擴展

  • April 18, 2020

我不太確定如何表達這一點,也許這就是我找不到任何東西的原因,但我想重用命令中萬用字元列舉的值。這可能嗎?

設想:

$ 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命令必須{}使用-execwhich 類似於我在上面尋找的內容。

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字元串運算符來提取源目錄的編號。

我保證有更好的方法來做到這一點,這就是我想到的。

引用自:https://serverfault.com/questions/221318