Bash에서 파일의 n 바이트를 다른 바이트로 씁니다.

PiNewbie 09/19/2017. 2 answers, 493 views
linux bash file-management bash-scripting binary-files

안녕하세요, bash를 사용하여 k 위치에서 시작하여 한 파일의 n 바이트를 새로운 파일에 어떻게 쓸 수 있습니까?

  • 예를 들어, n = 60, k = 1 및 파일 크기 = 100이면 두 번째 파일은 첫 번째 바이트에서부터 60 번째 바이트까지 구성되며 크기는 60 바이트입니다
  • 예를 들어, n = 40, k = 61 및 파일 크기 = 100 인 경우 : 두 번째 파일은 61 번째 바이트에서 100 번째 바이트까지 구성되며 크기는 40 바이트입니다

우리는 ASCII 파일이 아닌 2 진 파일로 작업하고 있으므로, 2 개 반의 연결은 원본 파일과 동일해야합니다!

( dd 가능합니까?)

1 Comments
2 choroba 09/19/2017
ddskip , countibs 옵션을 참조하십시오.

2 Answers


cxw 09/19/2017.

예. dd 맨 페이지 마다 다음과 같은 것을 찾고있다.

dd bs=1 count=60 if=_filename_1_ of=_filename_2_
dd bs=1 skip=60 count=40 if=_filename_1_ of=_filename_2_ 

여기서 _filename_n_ 은 실제 파일 이름으로 바뀝니다.

bs=1countskip 이 바이트 수임을 의미합니다. skip 은 얼마나 많은 skip 것인가입니다. count 는 복사 할 수 있습니다. 바이트 수 Edit 은 1이 아닌 0에서 시작합니다. 따라서 첫 번째 바이트에서 시작하려면 skip=0 (또는 skip unspecified로 두십시오).

bash 함수로서 다음을 사용할 수 있습니다 :

# copy_nk(n, k, infile, outfile)
copy_nk() {
    dd bs=1 count="$1" skip="$2" ${3:+if="$3"} ${4:+of="$4"}
} 

다음과 같이 호출하십시오.

copy_nk 60 0 infile.txt outfile.txt 

(바이트 번호가 0에서 시작하기 때문에 k = 0 ).

$NO 을 사용하면 출력 파일이나 입력 파일을 생략 할 수 있습니다. 예를 들어,

cat infile.txt | copy_nk 60 0 > outfile.txt 
1 comments
PiNewbie 09/19/2017
인덱스 카운터는 0 또는 1에서 시작합니까? 그래서 2 바이트에서 시작한다는 것을 의미하는 건너 뛰기가 1 인지 추측합니다. 그 맞습니까?

Digital Trauma 09/22/2017.

head 와 bash 명령 그룹을 사용하는 또 다른 방법이 있습니다 :

 { head -c60 > /dev/null ; head -c40 > output.txt ; } < input.txt 

여기서 첫 번째 head 는 input.txt에서 처음 60 바이트를 읽고 비트 버킷으로 보냅니다.

head 명령은 명령 그룹 내에 있으므로 input.txt 내의 파일 위치는 보존됩니다. 따라서 두 번째 head 는 다음 40 바이트 (1부터 시작하는 인덱스를 사용하여 바이트 61에서 100까지)를 읽고 output.txt에 씁니다.


실제로이 방법은 split 과 같은 기능을 제공하기 위해 일반화 될 수 있지만 각 출력 파일의 길이를 지정할 수있는 이점이 추가되었습니다. 크기가 7, 50, 23 인 청크와 나머지로 나누려는 100 바이트 파일이 있다고 가정합니다. 우리가 할 수있는 일은 :

 {
    head -c7 > 7bytes.txt
    head -c50 > 50bytes.txt
    head -c23 > 23bytes.txt
    cat > remaining-bytes.txt
} < input.txt 
4 comments
3 Ilmari Karonen 09/19/2017
블록 장치에 출력을 파이프 할 정도로 미친 듯이 쉽게 head 가진 파일 시스템을 손상시킬 수 있습니다 (또는 더 쉽게). 물론, 당신은 그렇게하지 않을 것입니다 - 대신 dd 를 사용하거나 그 작업을위한 다른 것을 사용하십시오. dd 가 무서운 평판을 dd 이유는 디스크 이미지 복제와 같이 본질적으로 위험한 작업을 위해 충분히 조심스럽게 사용할 can 있을 정도로 강력하다는 것입니다. 물론, 어떤 사람들은 디스크를 엉망으로 만들어 버리지는 않을 것입니다.하지만 그 이유는 그들이 dd 를 사용하는 것이 아니라, 그들이 처음에 /dev/sda 를 망치고 있다는 것입니다.
cxw 09/20/2017
아주 좋아! 나는 head -c 에 대해 몰랐다.
1 Barmar 09/22/2017
루트로 실행중인 경우에만 파일 시스템을 손상시킬 수 있습니다. 그리고 루트라면 파일에 쓸 수있는 유틸리티로 손상시킬 수 있습니다.
Digital Trauma 09/22/2017
@IlmariKaronen 박람회 - 불필요한 anti- dd FUD를 제거했습니다.

Related questions

Hot questions

Language

Popular Tags