Bashで文字列を使用してforループを実行する方法

Bashで文字列を使用してforループを実行する方法

ループを文字列として実行する必要があります。これ:

bash -c "for l in $(/bin/ls /dir1); do /bin/ln -sf $l /dir2/; done"

エラーが発生します。

/bin/bash: -c: line 1: syntax error near unexpected token `file1'
/bin/bash: -c: line 1: `file1'

file1は、シンボリックリンクに変換したい最初のディレクトリのファイルの1つです。

答え1

ls出力を解析せずに:http://mywiki.wooledge.org/ParsingLs

また、この例ではループを必要とせず、lnループに引数を繰り返すようにします。 cd現在のディレクトリで相対パスを使用して相対シンボリックリンクを作成するときに相対シンボリックリンクターゲットを機能させるには、シンボリックリンクを作成するディレクトリに移動します。

(cd /dir1 && ln -sf -- * /dir2)      # make broken symlinks in dir2
(cd /dir2 && ln -sf -- ../dir1/* .)  # make relative symlinks
ln -sf /dir1/* /dir2/                # make absolute symlinks

(subshell)現在のシェルでディレクトリが変更されないようにします。

使用することもできます。これはコマンドラインの末尾にのみリストを入れることができるのでln -sf -t /dir2 -- *便利です。find -exec ln -t /dir {} +find -exec {} +

GNUには、cpハード/シンボリックリンクを生成するオプションもあります-l-s

関連情報