빈 파일을 만들 때 ': >> file'보다 'touch file'을 선호하는 이유는 무엇입니까?


33

지금까지이 작업을 수행 할 수 있다는 것을 절대 깨닫지 못했습니다.

: >> file

기능적으로 다음과 같은 것 같습니다.

touch file

대부분의 리소스가이 셸 내장에 대한 터치를 선호하는 이유가 있습니까?


7
짧은 형식은 쉘과 관련이있을 수 있지만 터치는 독립형 명령입니다. 따라서 짧은 형식은 모든 쉘이 단축키를 제공하지는 않기 때문에 사용하는 쉘에 따라 다릅니다 (그리고 사람들은이 영역에서 선호도가 높습니다). touch독립 실행 형은 사용해야하는 방식과 동일하게 작동합니다.
Patrick Mevzek


6
첫 번째 예제는 같은 효과를 가지도록 (예 : 파일의 내용을 파괴하지 않도록) : >> file또는 로 편집해야 >> file합니다.
user000001

2
touch주로 mtime을 업데이트합니다. 기존 파일과 달리 비어 있지 않습니다 >.
rexkogitans

2
두 명령 모두 "빈 파일을 생성하지 않습니다"; 파일이 아직없는 경우에만이 결과가 나타납니다. 빈 파일을 보장하려면가 필요합니다 > file.
Alexis

답변:


47

당신은 사용할 필요가 없습니다 :; 당신은 > file(적어도 bash다른 쉘은 다르게 행동 할 수 있습니다) 할 수 있습니다 .

실질적인 측면에서, 여기에는 실질적인 차이가 없습니다 (하지만 호출하는 데 드는 약간의 오버 헤드가 문제임 /bin/touch).

touch그러나 내용을 변경하거나 지우지 않고 이미 존재하는 파일의 타임 스탬프를 수정하는 데 사용할 수도 있습니다. 또한 이미 존재 > file하는 file것을 날려 버릴 것 입니다. 대신을 사용하여 해결할 수 있습니다 >> file.

또 다른 차이점 touchtouch foo bar baz quux각 파일마다 고유 한 리디렉션이 필요한 리디렉션보다 더 간결한 구문으로 여러 파일을 한 번에 생성 (또는 타임 스탬프 업데이트) 할 수 있다는 것입니다 (예 :) >foo >bar >baz >quux.

사용 touch:

$ touch foo; stat -x foo; sleep 2; touch foo; stat -x foo
  File: "foo"
  Size: 0            FileType: Regular File
  Mode: (0644/-rw-r--r--)         Uid: (991148597/redacted)  Gid: (1640268302/redacted)
Device: 1,5   Inode: 8597208698    Links: 1
Access: Fri May 25 10:55:19 2018
Modify: Fri May 25 10:55:19 2018
Change: Fri May 25 10:55:19 2018
  File: "foo"
  Size: 0            FileType: Regular File
  Mode: (0644/-rw-r--r--)         Uid: (991148597/redacted)  Gid: (1640268302/redacted)
Device: 1,5   Inode: 8597208698    Links: 1
Access: Fri May 25 10:55:21 2018
Modify: Fri May 25 10:55:21 2018
Change: Fri May 25 10:55:21 2018

리디렉션 사용 :

$ > foo; stat -x foo; sleep 2; >> foo; stat -x foo
  File: "foo"
  Size: 0            FileType: Regular File
  Mode: (0644/-rw-r--r--)         Uid: (991148597/redacted)  Gid: (1640268302/redacted)
Device: 1,5   Inode: 8597208698    Links: 1
Access: Fri May 25 10:55:21 2018
Modify: Fri May 25 10:56:25 2018
Change: Fri May 25 10:56:25 2018
  File: "foo"
  Size: 0            FileType: Regular File
  Mode: (0644/-rw-r--r--)         Uid: (991148597/redacted)  Gid: (1640268302/redacted)
Device: 1,5   Inode: 8597208698    Links: 1
Access: Fri May 25 10:55:21 2018
Modify: Fri May 25 10:56:25 2018
Change: Fri May 25 10:56:25 2018

6
>> file수정 시간을 업데이트하지 않는 것 같습니다 . OP가 찾고있는 것이 아니라 단지 터치하기위한 완벽한 대안이 아니라고 지적하고 싶었습니다.
Jesse_b

2
질문은 특정 쉘을 지정하지 않기 때문에. > filezsh에서는와 cat > file같지 않다는 것을 지적하는 것이 좋습니다 : > file.
JoL

또한 tcsh는을 허용 : > file하지만에 오류가 > file있습니다. 어쩌면의 동등성 > file에는 : > fileBourne 쉘 및 배쉬로 제한된다?
JoL

하나는 철저를 위해, 그러나, 당신이 쉘 리디렉션을 사용하여 여러 파일을 만질 수있는 여러 주류 포탄 (가장 간단한 구현 자연스럽게 부작용 등의 작업이 원인 때문에 심지어 모든 또는 대부분의 껍질을 거라 생각) 참고 : : >foo >bar또는 : >>foo >>bar것 모두를 터치 foo하고 bar.
mtraceur

여기서 실제 질문의 맥락 때문에 단지 비판적이지만 파일 : >foo >bar은 아닙니다 touch. (null) 출력을 파일 : 리디렉션 합니다. touch파일을 만질 것입니다. (:
DopeGhoti

32

touch별도의 특수 문자를 입력하지 않고도 한 번에 여러 파일을 이동할 수 있기 때문 입니다. 여기에는 괄호 확장과 같은 것들이 포함됩니다 touch file{1,2,3,4}.

또 다른 문제는 튜토리얼을 작성할 때 독자가 주제에 대해 잘 모르는 것을 인식하는 것이 중요하다는 것입니다. 문자가 아닌 문자가 이상하게 보이는 조합보다 간단한 명령이 훨씬 이해하기 쉽습니다. 내가 모르는 캐주얼 쉘 사용자의 숫자가 기대 :정말하지 않는 단순한 이유이며, 이렇게 아무것도. > foo명령이없는 일반의 경우와 마찬가지로 : 리디렉션이 무엇인지 알고 있더라도 소스없는 리디렉션은 직관적이지 않을 수 있습니다.

또한 여기서는 unix.se에서 프롬프트를 표시하기 위해 선행 달러 기호로 명령 샘플을 작성하는 경우가 많습니다. 줄의 시작 부분에 특수 문자가 혼동 될 수 있습니다. >기본 프롬프트의 일부로 사용 되는 시스템 및 쉘이 있습니다 .


4
명령이 완전히 이해되지 않으면 항상 "man touch"가 있습니다. "man :> file"이 유용한 것을 리턴 할 것 같지는 않습니다. 내 시스템 이름 (많은 원격 xterm을 사용하기 때문에)과 현재 디렉토리를 표시하고 시스템마다 다른 색상으로 설정됩니다.
jamesqf

1
@ jamesqf, 예. 자, 물론 help :여러분의 쉘이 문서화를 위해 가지고 있거나 무엇이든 있습니다. 그러나 그것은 :모든 것이 맨 페이지를 가지고 있지 않다는 것을 기억 :하고 문서에서 찾을 수 있다는 것을 기억하면서 그 자체로 명령으로 인식해야합니다 . 마지막 부분은 매우 어려울 수 있습니다. : D
ilkkachu

@ jamesqf, 그리고 예, 주로 기본 프롬프트의 마지막 문자를 의미했습니다.
ilkkachu

1
직관 과 모호하지 않은 구성 측면 을 지적 +1 .
mtraceur

@ilkkachu : 예. 문서에서 콜론을 찾는 것은 그리 어렵지 않습니다. 문장 부호가 아닌 콜론을 찾는 것은 다른 문제입니다 :-)
jamesqf

18

글쎄, 나에게 가장 중요한 이유는 가독성이다. 으로 touch file당신이 무슨 일이 일어나고 있는지, 사람도 꽤 쉘 스크립트 무슨 일이 일어나고 있는지 알고에서 교육을하지. 그렇지 않은 경우 쉽게 수행 man touch하고 볼 수 있습니다.

A FILE argument that does not exist is created empty

애매한 물건 등으로 :하고 >, 그것은 무슨 일이 일어나고 있는지 더 어려운, 그리고 진짜 장점은 없다 같은 것을 사용할 필요가 없습니다.


6

/ tmp의 일부 마커 파일이 작성되고 있음을 기억하는 이전 쉘 스크립트 중 하나를 검색한다고 가정하십시오. "touch"라는 단어에 대한 모든 * .sh 파일을 쉽게 잡을 수 있습니다. 검색 할 정확한 파일 이름을 모르는 경우 콜론을 움켜 쥐면 많은 오 탐지가 발생합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.