複数のファイルを1つのファイルにハードリンク/ソフトリンク

複数のファイルを1つのファイルにハードリンク/ソフトリンク

フォルダにファイルが多すぎます。これらすべてのファイルを1つのファイルにリンクしたいと思います。たとえば、cat * > Final_file;これによりディスク容量が増え、時間もかかります。すべてのファイルをfinal_fileにハードリンク/ソフトリンクする方法はありますか?たとえば、ln*final_file です。

答え1

リンクではできないようです。ただし、名前付きパイプを使用できます。例:

# create some dummy files
echo alpha >a
echo beta  >b
echo gamma >c

# create named pipe
mkfifo allfiles

# concatenate files into pipe
cat a b c >allfiles

最後の呼び出しは、一部のプロセスがパイプからデータを読み取り、終了するまでブロックされます。継続的な操作のために、プロセスが読み取られ、再起動されるのを待つループを使用できます。

while true; do
  cat a b c >allfiles
done

答え2

これは不可能です。

N個のファイルはN個のinodeを意味します。定義によると、ハードリンクは同じinodeの別の名前にすぎません。シンボリックリンクは、特定のinode(該当するターゲット)を指すファイルです。ソフトリンクでもハードリンクでも、リンクは単一のインデックスノードを参照できます。

答え3

正直に言うと、いいえ...単一のファイルへのハード/ソフトリンクをリンクできません。リンクは、あるファイルから別のファイルへのポインタにすぎません。

これでスペースが心配され、スペースを解放するには、次のようにします。

for i in *
do
    cat < "$i" >> destination_file &&
      rm -f -- "$i"
done

デフォルトでは、出力をDestination_fileに追加してからファイルを削除します。また、元のファイルが必要ないと仮定します。

関連情報