あるディレクトリから別のディレクトリに複数のファイルをコピーしたいと思います。次の構造を含む変数(ファイル)があります。
file1 file2
File1とfile2はdir1にあり、機能しない次のコードを使用してdir2にコピーしようとします。
cp ./dir1/$files ./dir2
答え1
いくつかの方法があります。最も簡単な方法は、最初のディレクトリに切り替えることです。
cd dir1 ; cp $files ../dir2
1つの問題は、名前がスペースで区切られた文字列が名前を操作するのに最も適した形式ではないことです。特に、名前にスペースが含まれている場合はさらにそうです。あなたが持っているものはあなたが持っているものですが、bash、zsh、ksh、または配列に似たものがあることを願っています。文字列を配列に変更:
names=( $files )
その後、名前配列の各要素に "dir1 /"を追加するなどの変換を適用できます。
cp "${names[@]/#/dir1/}" dir2
これは最も明確な構文ではないので、もう少し詳しく見てみましょう。
- 最初は、
/
代替作業を紹介します。 - 正規表現
#
と同様に、要素の先頭に一致します。^
- 2番目は
/
交換の「from」部分を終了します。 - 「to」部分が置き換えられました
dir1/
。 3番目の部分は特別なものではなく、/
「to」部分の文字にすぎません。 - これは
[@]
配列のすべての要素に対して機能します。[@]
単語の区切りを防ぐには、内部二重引用符を使用してください。 - および代替操作を変数名と組み合わせて
{
使用する必要があります。}
[@]
- これは
$
単なる一般的な変数参照です。