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 -c
。xargs
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'
。