빈 파일을 만들 때 ': >> 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.

또 다른 차이점 touch은 touch 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.