ファイルから読み取るディレクトリのシンボリックリンクGlobを作成します。

ファイルから読み取るディレクトリのシンボリックリンクGlobを作成します。

tsvファイルの5番目の列のディレクトリ名を抽出しており、ExtensionList.tsv拡張フォルダ内の$ {HOME}で名前が始まるすべてのフォルダへのシンボリックリンクを作成したいと思います。

awk -F'\t' '{print $5 }' ExtensionList.tsv \
    | xargs -L 1 -I "{}" ln -s -f "${HOME}/{}"* Extension

サンプルTsvファイル

2   n   xshrim.txt-syntax   Txt Syntax  xshrim.txt-syntax

したい(tsvファイルのすべてのレコードについて)

ln -s -f xshrim.txt-syntax* Extension

どんな提案がありますか?

私のコマンドが機能しないのはなぜですか?

ベストアンサー1

TSVファイルから読み取った各名前は、別々にグローバルに拡張する必要があります。これは、ディレクトリ名ごとに1回呼び出して行うことができますsh -cxargs

cut -f 5 ExtensionList.tsv | 
  xargs -I {} sh -c 'ln -s -f "$HOME/$1"* Extension/' sh {}

5番目の列のファイル名にはスペースで始まらないか、バックスラッシュ、一重引用符、二重引用符文字を含めないとします。 GNUを介して実装されたら、アドインxargs-d '\n'これらの問題を解決できます。

shファイルごとに1つずつ実行したくない場合は、次のようにします。

cut -f 5 ExtensionList.tsv | 
  xargs sh -c '
    ret=0
    for dirpath do
      ln -s -f "$HOME/$dirpath"* Extension/ || ret=$?
    done
    exit "$ret"' sh

上記の制限に加えて、ファイルパスにはスペースを含めないでください。 GNU xargs'はまた、この追加の制限を回避します-d '\n'


引用:ワイルドカードを使用してシンボリックリンクを作成する方法はありますか?

おすすめ記事