LINUX:すべてのファイルを1つのディレクトリから別のディレクトリにリンクする[終了]


123

私は(リンクするln -sにあるすべてのファイル)/mnt/usr/lib//usr/lib/

たくさんのファイルがありますが、どうすればすぐにできますか?:)


「ロット」はいくつのファイルであり、「速い」と考えるのはどれくらい速いですか?
エリックスミス

4
これは、「serverfault」または「superuser」に適合するかどうかにかかわらず50:50ですが、プログラミングではないため、stackoverflowには適していません。
Marc Gravell

回答:


202
ln -s /mnt/usr/lib/* /usr/lib/

たぶん、これはスーパーユーザーのものです。


6
これには隠しファイルは含まれず、ディレクトリ全体がリンクされます。これらのいずれかが必要なものでない場合は、私の答えを参照してください。それ以外の場合は、これが最短の方法です。
カスカベル

あなたが正しい。しかし、ライブラリは通常隠されていません。いずれにせよ、ドットファイルが関係している場合、ソリューションがより便利になります。

1
他のフォルダを永久に指しますか?
nmkyuppie 2013

@YuPPieたぶん、それはディレクトリ内のすべてのファイルへのハードリンクを作成するだけです。(これは私が今日欲しかったものなので、+ 1:D)
表示名

2
@SargeBorschシンボリックリンクを作成します(ハードリンクは異なります)。
jsejcksn

90

GNUにcpは、コピーする代わりにシンボリックリンクを作成するオプションがあります。

cp -rs /mnt/usr/lib /usr/

これはPOSIXにcpはないGNU拡張であることに注意してください。


4
この方法でシンボリックリンクを作成するには、現在のディレクトリが/ usr /である必要があります
Soul_man

@caf宛先が既存のフォルダーの場合、libフォルダーは/ usr /フォルダー内に作成されます
Tamil Selvan C '24

2
いい答えだ。-sの代わりに-lを使用してハードリンクを作成するためにも使用できます。
ファックス


15

投稿されたソリューションは、隠しファイルをリンクしません。それらを含めるには、これを試してください:

cd /usr/lib
find /mnt/usr/lib -maxdepth 1 -print "%P\n" | while read file; do ln -s "/mnt/usr/lib/$file" "$file"; done

ディレクトリを再帰的に作成してファイルのみをリンクしたい場合(ディレクトリ内にファイルを作成した場合、実際にはそうではあり/usr/libません/mnt/usr/lib)、次のようにできます。

cd /usr/lib
find /mnt/usr/lib -mindepth 1 -depth -type d -printf "%P\n" | while read dir; do mkdir -p "$dir"; done
find /mnt/usr/lib -type f -printf "%P\n" | while read file; do ln -s "/mnt/usr/lib/$file" "$file"; done

2
bashで拡張グロビングをオンにしている場合、これは隠しファイルでワイルドカードを使用する方法としても機能するはずです。これは、ドットで始まり、何もないか別のドット以外の何かが続くすべてに一致します(つまり、除外さ./れます../):ln -s /mnt/usr/lib/.!(|.)* /usr/lib
Cascabel
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.