이것을 사용하여 cwd에있는 모든 폴더의 타임 스탬프를 업데이트하려고합니다.
for file in `ls`; do touch $file; done
그러나 작동하지 않는 것 같습니다. 어떤 아이디어가 있습니까?
이것을 사용하여 cwd에있는 모든 폴더의 타임 스탬프를 업데이트하려고합니다.
for file in `ls`; do touch $file; done
그러나 작동하지 않는 것 같습니다. 어떤 아이디어가 있습니까?
답변:
지금까지의 모든 대답은 (질문의 예뿐만 아니라) touch
"모든 폴더를 터치하십시오"라고 말하더라도 디렉토리의 모든 것을 원한다고 가정합니다 . 디렉토리에 파일과 폴더가 포함되어 있고 폴더 만 업데이트하려는 경우 다음을 사용할 수 있습니다 find
.
$ find . -maxdepth 1 -mindepth 1 -type d -exec touch {} +
또는 find
구현이 비표준 -mindepth
/ -maxdepth
술어를 지원하지 않는 경우 :
$ find . ! -name . -prune -type d -exec touch {} +
이:
$ touch -c -- */
다음을 제외한 대부분의 쉘에서 작동합니다.
touch
디렉토리 로 심볼릭 링크됩니다*
이외의 껍질을 csh
, tcsh
, zsh
, fish
또는 (대신 오류를보고 할) 톰슨 쉘. 여기서는 -c
여전히 touch
디렉토리가 아닌 파일 일 수 있지만이 문제를 해결하는 데 사용 하고 있습니다 *
.를 사용 하여 숨겨진 디렉토리를 포함 zsh
하여 touch
디렉토리에만 :
touch -- *(D/)
{} \+
특별한 find
구문입니다-자세한 내용은 맨 페이지를 읽으십시오. 나는 touch -c ./*/
잘 작동 할 것이라고 생각 한다.
-maxdepth 1
명령에 포함시켜야 합니다 find
. OP는 하위 폴더가 아닌 cwd의 해당 폴더 만 터치하려고합니다.
시험
touch ./*
for
모든 단일 파일에 대해 새로운 프로세스를 생성하고 모든 파일 이름, 공백이 있거나 이름이 옵션처럼 보이는 파일에도 작동 하는 불필요한 루프를 피합니다 -t
. 작동하지 않는 유일한 시간은 디렉토리에 파일이 아닌 파일이없는 경우라는 파일을 만드는 것 *
입니다. 이를 피하기 위해, touch
대부분의 구현의 경우 존재하지 않는 파일을 만들지 않는 -c
옵션 ( --no-create
GNU 버전으로 도 불림 )이 있습니다.
touch -c ./*
도에서 좋은 참조하십시오 jasonwryan의 대답 뿐만 아니라이 일을 .
당신 의 출력을 구문 분석을 시도해서는 안됩니다ls
.
또한 "$file"
공백을 캡처 하려면 인용해야 합니다. http://www.grymoire.com/Unix/Quote.html을 참조 하십시오
이와 같은 것이 당신이 추구하는 것을 달성 할 수 있습니다.
for file in *; do touch "$file"; done
더 자세한 설명 은 첫 두 배쉬는 함정 을 참조하십시오 .
*
파일과 이름이 점으로 시작하는 디렉토리를 캡처하지 않습니다. 이를 해결하는 한 가지 방법 dotglob
은를 통해 쉘 옵션 을 활성화하는 것 shopt -s dotglob
입니다.