web-dev-qa-db-ja.com

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

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

4
quartz

リンクがあるので、恐れ入りますが、これは不可能です。ただし、名前付きパイプを使用することはできます。例:

# 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
5
Marco

これは不可能です。

NファイルはNiノードを意味します。ハードリンクは、定義上、同じiノードの単なる異なる名前です。シンボリックリンクは、特定のiノード(ターゲット)を指すファイルです。ソフトでもハードでも、リンクは単一のiノードを参照できます。

2
Joseph R.

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

これで、スペースが心配で、スペースを解放したい場合は、次のことができます。

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

基本的に、出力をdestination_fileに追加し、後でファイルを削除します。また、元のファイルは必要ないと思います。

2
BitsOfNix