파일 a.txt
에는 다음이 포함됩니다.
1 one
2 two
3 three
4 four
5 five
6 six
split -2 a.txt output_
그런 다음 명령: 출력으로 세 개의 새 파일 생성output_aa
output_ab
output_ac
다음을 입력하면 cat output_aa
메시지가 나타납니다: no such file or directory
.
하지만 output_aa
gedit에서 볼 수 있습니다.
왜?
답변1
man split
부분적으로는 다음과 같이 말합니다.
고정 크기 INPUT을 PREFIXaa, PREFIXab, ...로 출력합니다.
PREFIX
마지막 명령줄 인수는 어디에 있습니까( output_
귀하의 경우). 따라서 출력 파일의 이름은 output_aa
, output_ab
및 로 output_ac
각각 두 줄씩 세 부분으로 나뉩니다.
이것은 또한 내가 본 행동입니다.
그래서 읽을 수 없는 이유는 output_a
직접 만들지 않으면 존재하지 않기 때문입니다.
단일 문자 접두사만 사용하여 파일 이름을 지정하려는 경우이미 분할을 실행 중이라면 이름을 바꿀 수 있습니다. bash를 가정하면 이것을 사용할 수 있습니다변수 재형성 기능접미사의 첫 번째 문자를 제거합니다. 이로 인해 중복이 발생할 수 있습니다(이 특별한 경우는 아니지만 일반적인 경우일 수 있음).
for f in output*; do echo mv "${f}" "${f%a?}${f##output_?}"; done
대상 이름 표현식의 첫 번째 부분은 파일 이름 끝 a?
(문자임) 에서 제거되고 ?
두 번째 부분만 처음 output_?
(역시 임의 문자)에서 제거되고 나머지는 추가됩니다. ?
결과는 접미사의 첫 번째 문자를 제거하는 것입니다.
귀하의 요구 사항이 만족스러우면 삭제하십시오 echo
.
재실행을 수락할 수 있는 경우split
, GNU coreutils(8.5 이상)에는 접미사의 길이를 지정할 수 있는 split
옵션이 있습니다 . --suffix-length
적절한 값을 사용하여 명령줄에 다음을 추가하면 됩니다.
split -2 --suffix-length=1 a.txt output_
이는 예상대로 output_a
, output_b
및 을 제공합니다. output_c
감사해요@don_crissti이것을 지적하십시오.