これを行う方法が正確にはわかりませんが、特定のファイルのシンボリック リンクを 1 つのディレクトリに作成し、そのシンボリック リンクを別のディレクトリに配置する必要があります。
たとえば、拡張子「.cc」を持たない現在のディレクトリ bar1 で、名前に「foo」という単語が含まれるすべてのファイルをリンクし、シンボリック リンクをディレクトリ bar2 に配置します。
LINUX bashでこれを達成できる単一行コマンドがあるかどうか疑問に思っていました.
bar1
ディレクトリとを含むディレクトリにいると仮定しますbar2
。
find bar1 -name '*foo*' -not -type d -not -name '*.cc' -exec ln -s $PWD/'{}' bar2/ \;
これを試して:
cd bar1
find . -maxdepth 1 -name '*foo*' -not -name '*.cc' -exec echo ln -s $PWD/{} ../bar2 \;
予行演習に満足したらecho
、コマンドから削除して実際に実行します。
これは、拡張グロビングで簡単に処理できます。
shopt -s extglob
cd bar2
ln -s ../bar1/foo!(*.cc) .
すべてを 1 行にまとめたい場合は、コマンド セパレータを使用します。
shopt -s extglob; cd bar2; ln -s ../bar1/foo!(*.cc) .
2 つの例は同じですが、最初の例の方が読みやすいです。
これは技術的には1行の回答としてカウントされません...ただし、1つのインスタンスに貼り付けることができ、探していることを実行する必要があります。
list=`ls | grep foo | grep -v .cc`;for file in $list;do ln $file /bar2/;done