3

これを行う方法が正確にはわかりませんが、特定のファイルのシンボリック リンクを 1 つのディレクトリに作成し、そのシンボリック リンクを別のディレクトリに配置する必要があります。

たとえば、拡張子「.cc」を持たない現在のディレクトリ bar1 で、名前に「foo」という単語が含まれるすべてのファイルをリンクし、シンボリック リンクをディレクトリ bar2 に配置します。

LINUX bashでこれを達成できる単一行コマンドがあるかどうか疑問に思っていました.

4

4 に答える 4

3

bar1ディレクトリとを含むディレクトリにいると仮定しますbar2

find bar1 -name '*foo*' -not -type d -not -name '*.cc' -exec ln -s $PWD/'{}' bar2/ \;
于 2012-06-04T21:01:49.783 に答える
2

これを試して:

cd bar1
find . -maxdepth 1 -name '*foo*' -not -name '*.cc'  -exec echo ln -s $PWD/{} ../bar2 \;

予行演習に満足したらecho、コマンドから削除して実際に実行します。

于 2012-06-04T21:04:09.030 に答える
1

これは、拡張グロビングで簡単に処理できます。

shopt -s extglob
cd bar2
ln -s ../bar1/foo!(*.cc) .

すべてを 1 行にまとめたい場合は、コマンド セパレータを使用します。

shopt -s extglob; cd bar2; ln -s ../bar1/foo!(*.cc) .

2 つの例は同じですが、最初の例の方が読みやすいです。

于 2012-06-04T21:06:41.610 に答える
0

これは技術的には1行の回答としてカウントされません...ただし、1つのインスタンスに貼り付けることができ、探していることを実行する必要があります。

list=`ls | grep foo | grep -v .cc`;for file in $list;do ln $file /bar2/;done
于 2012-06-04T21:00:23.587 に答える