다음과 같은 텍스트 파일이 있다고 가정 해 봅시다.
john
george
james
stewert
모든 이름은 별도의 줄에 있습니다.
나는이 텍스트 파일의 라인을 읽고처럼, 각각의 이름에 대한 텍스트 파일을 만들려면 : john.txt
, george.txt
등
Bash에서 어떻게 할 수 있습니까?
답변
# 1 배쉬 + 사용 touch
:
while read line; do touch "$line.txt"; done <in
while read line; [...]; done <in
: 이것은 파일의 끝에 도달 할 때 발생하는 자체 반환read
할 때까지 실행됩니다 . 경로 재 지정 으로 인해 터미널 대신 현재 작업 디렉토리에 이름이 지정된 파일에서 입력을 읽습니다 .read
1
read
in
<in
touch "$line.txt"
이 실행touch
의 확장 된 값에서$line.txt
의 함유량이다line
하였다.txt
;touch
존재하지 않는 경우 파일을 작성하고 존재하는 경우 액세스 시간을 업데이트합니다.
사용 # 2 xargs
+ touch
:
xargs -a in -I name touch name.txt
-a in
: 현재 작업 디렉토리에xargs
이름이 지정된 파일에서 입력을 읽습니다in
.-I name
: 다음 명령에서xargs
발생하는 모든name
현재 행을 대체합니다 .touch name
:touch
대체 된 값인name
; 존재하지 않는 경우 파일을 작성하고 존재하는 경우 액세스 시간을 갱신합니다.
% ls
in
% cat in
john
george
james
stewert
% while read line; do touch "$line.txt"; done <in
% ls
george.txt in james.txt john.txt stewert.txt
% rm *.txt
% xargs -a in -I name touch name.txt
% ls
george.txt in james.txt john.txt stewert.txt
답변
이 특정 경우, 한 줄에 하나의 단어 만있는 경우 다음을 수행 할 수도 있습니다.
xargs touch < file
파일 이름에 공백이 포함될 수 있으면이 오류가 발생합니다. 이러한 경우 대신 다음을 사용하십시오.
xargs -I {} touch {} < file
재미를 위해 여기에 공백이있는 줄을 포함하여 임의의 파일 이름을 처리 할 수있는 몇 가지 다른 방법이 있습니다.
-
펄
perl -ne '`touch "$_"`' file
-
어 wk
awk '{printf "" > $0}' file
Linux 및 유사한 시스템에서 확장은 대부분의 파일에 대해 선택 사항입니다. .txt
텍스트 파일에 확장자를 추가 할 이유가 없습니다 . 당신은 자유롭게 할 수 있지만 전혀 차이가 없습니다. 따라서 확장을 원한다면 다음 중 하나를 사용하십시오.
xargs -I {} touch {}.txt < file
perl -ne '`touch "$_.txt"`' file
awk '{printf "" > $0".txt"}' file
답변
이 작업에는 AWK도 적합합니다.
testerdir:$ awk '{system("touch "$0)}' filelist
testerdir:$ ls
filelist george james john stewert
testerdir:$ awk '{system("touch "$0".txt")}' filelist
testerdir:$ ls
filelist george.txt james.txt john.txt stewert.txt
george james john stewert
다른 방법은 tee
. 줄이 파일 목록에 둘 이상의 문자열을 포함하는 경우이 방법이 중단됩니다.
testerdir:$ echo "" | tee $(cat filelist)
testerdir:$ ls
filelist george james john stewert
</dev/null tee $(cat filelist)
파이핑을 피하려면 다른 방법 으로도 수행 할 수 있습니다.
cp /dev/null
접근 방식 (이것은 공백이 포함 된 파일 이름으로 작동합니다) :
testerdir:$ cat filelist | xargs -I {} cp /dev/null "{}"
testerdir:$ ls
filelist FILE WITH SPACES george james john stewert
testerdir:$ ls FILE\ WITH\ SPACES
FILE WITH SPACES
답변
텍스트 파일이 있다고 가정 해 보겠습니다.
대답이 있습니다 .)
awk '{system("touch \""$0".txt\"")}' file
공간과 접미사로도 방수 처리 =)