답변:
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
존재하지 않는 경우 파일을 작성하고 존재하는 경우 액세스 시간을 업데이트합니다.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
read line
실제로 라인을 읽어? @kos
<in
후 done
차종 read
의 while
루프 조건에서 읽고 저장 한 행 in
에서 line
각 반복하는 단계; 이런 식으로 touch "$line.txt"
루프 내부 .txt
가 끝에 있는 읽기 라인으로 확장됩니다 .
while read line; do touch "$line.txt"; done <in
혼자 일을? 소스 파일은 어디에 있습니까?
read
작동 하는 방식입니다. 참조하십시오 help read
.
이 특정 경우, 한 줄에 하나의 단어 만있는 경우 다음을 수행 할 수도 있습니다.
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
echo "" | tee file1 file2 file2
. 그러나 파일 이름에 공백이 있으면 중단됩니다.