シェル変数に保存されているパスのリストがありますtmp
。たとえば、次のようになります。
/abc/bcd/def/ZRT834/ZRT834_9/5678/S1_L001_R1.tar
/abc/bcd/def/ZRT834/ZRT834_9/5678/S2_L001_I1.tar
/abc/bcd/def/ZRT834/ZRT834_9/5678/S1_L001_I2.tar
/abc/bcd/def/ZRT207/ZRT207_1/5678/S1_L001_R1.tar
/abc/bcd/def/ZRT207/ZRT207_1/5678/S1_L001_R2.tar
/abc/bcd/def/ZRT207/ZRT207_1/5678/S1_L001_I2.tar
パスの一致パターンに基づいて新しいディレクトリを作成したいと思います。上記の例では、ディレクトリをZRT834_9
作成し、そのディレクトリのファイルへのZRT207_1
ソフトリンクを作成したいと思います。tar
ZRT834_9
私の出力は次S1_L001_R1.tar
のようになりますS2_L001_I1.tar
。S1_L001_I2.tar
どうやってこれを達成できますか?
ベストアンサー1
存在するzsh
:
files=(
/abc/bcd/def/ZRT834/ZRT834_9/5678/S1_L001_R1.tar
/abc/bcd/def/ZRT834/ZRT834_9/5678/S2_L001_I1.tar
/abc/bcd/def/ZRT834/ZRT834_9/5678/S1_L001_I2.tar
/abc/bcd/def/ZRT207/ZRT207_1/5678/S1_L001_R1.tar
/abc/bcd/def/ZRT207/ZRT207_1/5678/S1_L001_R2.tar
/abc/bcd/def/ZRT207/ZRT207_1/5678/S1_L001_I2.tar
)
# or files=(${(f)"$(<list.txt)"}) to get the file list from the non-empty
# lines of list.txt, or files=($=tmp) for word splitting the contents
# of a $tmp scalar variable according to the current value of $IFS.
for file ($files) {
dir=${file:h5:t}
mkdir -p -- $dir && ln -s -- $file $dir/
}
-comComponent1のヘッダーと結果の尾を${file:h5}
取得する位置です。または最後から数えることができます。5
h
$file
:t
${file:t3:h1}
¹ここ要素パスコンポーネントです。たとえば、コンポーネントは、、、、および../a//b///c/./d/e
です。与え、降伏する。 andを適用する前に、仕様への絶対パスの取得も参照してください。..
a
b
c
.
d
e
:h5
../a//b///c/.
:t
.
${file:A:h5:t}
:h5
:t