scp
複数のファイルを作成しようとしています。これにより、ls {aaa,bbb}*_list.txt
オプションのファイルのみを表示できます。ただし、変数に割り当ててコマンドで使用しようとするとscp
機能しません。
私は次のように試しました
files_to_scp="{aaa,bbb}*_list.txt"
scp $files_to_scp user@host:.
エラーが発生します{aaa,bbb}*_list.txt: No such file or directory
。ただし、エラーパス({aaa,bbb}*_list.txt
)をコピーして実行すると、ls
ファイルが表示されます。ここに何か問題があるかもしれません。
答え1
これ支柱の拡張有効な/可能なファイルセットに拡張するには、構文に中{aaa,bbb}
括弧と引用符のない文字を含める必要があります。,
OPでは、 "{aaa,bbb}*_list.txt"
そのままリテラル文字列として保持し、まったく拡張しないでください。
また、中かっこ拡張を変数に保存し、その変数を挿入して中括弧を拡張することは決して機能しません。なぜなら、中かっこ拡張は他のシェル拡張の前に起こるからです。つまり、中かっこが拡張されると予想すると、$files_to_scp
シェルはすでに拡張に合格しています。かっこポイント
変数の使用はいいえ複数の単語をキャッチする正しい方法。ファイル名にスペースやその他のシェル特殊文字が含まれていると、ひどく失敗します。配列タイプと適切な引用符拡張を使用する
files_to_scp=({aaa,bbb}*_list.txt)
次に、結果を次のように使用します。
scp "${files_to_scp[@]}" user@host:.
答え2
変数(files_to_scp
)にはリテラル文字列が含まれています"{aaa,bbb}*_list.txt"
。いいえ一致するすべてのファイルの拡張子です。 bashはスカラー変数を割り当てたときに中括弧を拡張しません。
しかし、bashはそれを配列に拡張します。代わりに配列を使用してください。
例えば
files_to_scp=( {aaa,bbb}*_list.txt )
scp "${files_to_scp[@]}" user@host:.
以下は、何が起こっているかを示す(単純で実用的な)例と説明です。
あなたのパターンに一致するファイルの束を作成しました
$ mkdir spike $ cd spike $ touch {aaa,bbb}{01..10}_list.txt $ ls aaa01_list.txt aaa05_list.txt aaa09_list.txt bbb03_list.txt bbb07_list.txt aaa02_list.txt aaa06_list.txt aaa10_list.txt bbb04_list.txt bbb08_list.txt aaa03_list.txt aaa07_list.txt bbb01_list.txt bbb05_list.txt bbb09_list.txt aaa04_list.txt aaa08_list.txt bbb02_list.txt bbb06_list.txt bbb10_list.txt
変数の代入はリテラル文字列を格納します。
$ files_to_scp="{aaa,bbb}*_list.txt" $ declare -p files_to_scp declare -- files_to_scp="{aaa,bbb}*_list.txt"
bashは引用符なしで同じことを行います。
$ files_to_scp={aaa,bbb}*_list.txt $ declare -p files_to_scp declare -- files_to_scp="{aaa,bbb}*_list.txt"
配列を使用すると、一致する各ファイル名が配列の要素として保存されます。
$ files_to_scp=( {aaa,bbb}*_list.txt ) $ declare -p files_to_scp declare -a files_to_scp=([0]="aaa01_list.txt" [1]="aaa02_list.txt" [2]="aaa03_list.txt" [3]="aaa04_list.txt" [4]="aaa05_list.txt" [5]="aaa06_list.txt" [6]="aaa07_list.txt" [7]="aaa08_list.txt" [8]="aaa09_list.txt" [9]="aaa10_list.txt" [10]="bbb01_list.txt" [11]="bbb02_list.txt" [12]="bbb03_list.txt" [13]="bbb04_list.txt" [14]="bbb05_list.txt" [15]="bbb06_list.txt" [16]="bbb07_list.txt" [17]="bbb08_list.txt" [18]="bbb09_list.txt" [19]="bbb10_list.txt")