名前は似ていますが、別のサブディレクトリにあるすべてのファイルをリンクしようとしています。
私は正確なファイルマッチングのためにこの解決策を見つけましたが、それを部分的なマッチングに適用する方法がわかりません。
複数のディレクトリに同じ名前の新しいリンクファイルを作成する
サンプルファイルパス:
out/ch1/name1.1.assoc.txt
out/ch1/name2.1.assoc.txt
out/ch1/name3.1.assoc.txt
out/ch2/name1.2.assoc.txt
out/ch2/name2.2.assoc.txt
out/ch2/name3.2.assoc.txt
私は20の異なるchディレクトリを持ち、ファイル名の最後の数字はディレクトリ番号と一致します。
接続したい名前を含むファイルがあります。
name1
name2
name3
このソリューションを適用したり、このファイルを別の方法でリンクしたりするにはどうすればよいですか?私が望む最終結果は、ファイルリストの各名前に対して1つのファイルがあるディレクトリです(この場合、最終結果はname1、name2、name3という3つのファイルになります)。私たち
ベストアンサー1
存在するzsh
:
for name (${(f)"$(<names.txt)"})
cat -- out/ch<->/$name.<->.assoc.txt(.n) > outdir/$name
存在するbash
:
zsh -c '
for name (${(f)"$(<names.txt)"})
cat -- out/ch<->/$name.<->.assoc.txt(.n) > outdir/$name
'
インストールできない場合は、GNUシステム内またはGNUシステムで実行できるzsh
いくつかの作業があります。bash
readarray -t files < <(grep . names.txt)
shopt -s extglob failglob
for name in "${files[@]}"; do
printf '%s\0' out/ch+([0123456789])/"$name".+([0123456789]).assoc.txt |
sort -zV |
xargs -r0 cat -- > outdir/"$name"
done