この質問をした動機は次のとおりです。シンボリックリンクを作成する目的の1つはスペースを節約することですが、ディレクトリを別の場所に移動する単純なmvコマンドは、すべてをターゲットの場所に移動してシンボリックリンクを完全なファイルとして扱います。ファイルをバックアップすると、非常に大きくても不要なスペースを占有できます。私の質問は実際のファイルだけを移動し、シンボリックリンクはそのままにする方法はありますか?
答え1
使用できるrsync
rsync -l original_file backup_file
~からman rsync
-l, --links シンボリックリンクをシンボリックリンクにコピー
つまり、リンクが指すコンテンツではなく、リンクだけをコピーするだけです。これは移動ではなくコピーであることに注意してください。しかし、バックアップするというのがまさにその意味だと思います。
答え2
シェルテスト演算子を使用して、ファイルがシンボリックリンクである-L
かどうかをテストできます。ファイルの移動などを使用している場合は、mv *.txt elsewhere/
ループを使用してシンボリックリンクをスキップできます。
for x in *.txt; do
if ! [ -L "$x" ]; then mv -- "$x" elsewhere/; fi
done
または、find
その種類に応じてファイル操作を呼び出すこともできます。これは、ディレクトリを再帰的に移動するのに役立ちます。ディレクトリをに渡すと、mv
ディレクトリ全体が移動され、これは子のすべてのファイルに間接的に影響します。
これは、バックアップの「巨大ですが不要なスペース」とどのような関係があるのか理解していません。このスレッドは実際の質問とは関係がないかもしれません。。
答え3
作る代わりにシンボリックリンクあなた(あなた)はできます。ハードリンクしたがって、元のファイルを別の場所に移動または削除しても、ハードリンクは引き続き機能します。しかし、いくつかあります限定たとえば、ファイルに制限されているため、ディレクトリを指すことはできません。次に、同じファイルシステムに含まれるファイル間にのみリンクを作成できます。
とにかく、使用することを選択した場合シンボリックリンクソースファイルを移動した後、リンクのフルパスは他のファイル名へのポインタにすぎないため、再度提供する必要があります。