
フォルダにファイルが多すぎます。これらすべてのファイルを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に追加してからファイルを削除します。また、元のファイルが必要ないと仮定します。