폴더에 파일이 너무 많아요. 이 모든 파일을 하나의 파일로 연결하고 싶습니다. 예를 들어 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에 추가한 다음 파일을 삭제합니다. 또한 원본 파일이 필요하지 않다고 가정합니다.