때때로 우리가 읽은 것과 같은 파일에 쓰는 데 사용되는 솔루션이 있습니다. 다음은 매뉴얼 페이지에서 발췌 한 내용입니다.
sponge reads standard input and writes it out to the specified file.
Unlike a shell redirect, sponge soaks up all its input before opening
the output file. This allows constructing pipelines that read from and
write to the same file.
It also creates the output file atomically by renaming a temp file into
place, and preserves the permissions of the output file if it already
exists. If the output file is a special file or symlink, the data will
be written to it.
다음은 일반적으로 inode를 보존하기 위해 사용하지만 기호 링크를 보존 할 수 있음을 보여주는 스 니펫입니다.
# Utility functions: print-as-echo, print-line-with-visual-space.
pe() { for _i;do printf "%s" "$_i";done; printf "\n"; }
pl() { pe;pe "-----" ;pe "$*"; }
rm -f pet pet_link
echo "cat" > pet
pl " Input data file $FILE:"
head -v pet
pl " Results, before sed:"
ln --symbolic pet pet_link
ls -ligG pet pet_link
# sed --in-place --follow-symlinks 's/cat/dog/' pet_link
pe
pe " Results, after sed:"
sed 's/cat/dog/' pet_link | sponge pet_link
head -v pet
ls -ligG pet pet_link
어떤 생산 :
-----
Input data file data1:
==> pet <==
cat
-----
Results, before sed:
1571283 -rw-r--r-- 1 4 Nov 26 23:03 pet
1571286 lrwxrwxrwx 1 3 Nov 26 23:03 pet_link -> pet
Results, after sed:
==> pet <==
cat
1571283 -rw-r--r-- 1 4 Nov 26 23:03 pet
1571286 lrwxrwxrwx 1 3 Nov 26 23:03 pet_link -> pet
다음과 같은 시스템에서 :
OS, ker|rel, machine: Linux, 3.16.0-4-amd64, x86_64
Distribution : Debian 8.9 (jessie)
bash GNU bash 4.3.30
스폰지 코드는 moreutils 패키지로 제공됩니다 .
sponge soak up standard input and write to a file (man)
Path : /usr/bin/sponge
Package : moreutils
Home : http://kitenet.net/~joey/code/moreutils/
Version : 0.52
Type : ELF 64-bit LSB executable, x86-64, version 1 (SYS ...)
우리 가게에서는 매우 큰 파일의 경우 임시 파일에 쓰는 버전을 작성했습니다.
패키지는 데비안, 페도라, macOS (양조를 통해) 등에서 사용할 수 있습니다.