답변:
이것은 당신이 찾고있는 것을합니다 :
find . -maxdepth 1 -type f -print0 | xargs -L1 -p0 chmod +x
일반적으로 구문 분석 출력이 신뢰할 수 없기 때문에 find
대신에 사용합니다 . 그러나이 형식 은 개행 문자 나 기타 어려운 문자가 포함되어 있어도 파일 이름과 함께 작동합니다.ls
ls
find
설명
find . -maxdepth 1 -type f -print0
파일을 선택합니다. find의 많은 옵션 중 하나를 사용하여 사용자 정의 할 수 있습니다. 이 옵션 print0
은 find
파일 이름을 null로 구분 된 목록으로 인쇄하도록 지시 합니다. 이것은 파일 이름 목록을 전송하는 데 신뢰할 수있는 유일한 방법입니다.
xargs -L1 -p0 chmod +x
널로 구분 된 파일 이름 목록이 생성되어 find
명령이 적용됩니다.
이 -L1
옵션은 xargs
한 번에 하나의 파일 이름에서만 작동하도록 지시 합니다. 이 -p
옵션은 xargs
계속하기 전에 승인하라는 메시지를 표시합니다. 이 -0
옵션은 xargs
널 문자를 파일 이름 사이의 구분자로 사용하도록 지시 합니다.
[ @kwan이 지적 할 때까지 -p
옵션을 xargs
몰랐습니다.]
find: warning: you have specified the -maxdepth option after a non-option argument -type, but options are not positional (-maxdepth affects tests specified before it as well as those specified after it). Please specify options before other arguments.
가 작동 그래서 -maxdepth 1
전과 -type f
같이 : find . -maxdepth 1 -type f -print0 | xargs -L1 -p0 chmod +x
.
사용할 수 있습니다 xargs
.
예 :
ls|xargs -I path -p chmod +x path
옵션 -p
: 각 명령 줄을 실행할지 여부를 사용자에게 묻고 터미널에서 줄을 읽습니다. 응답이 'y'또는 'Y'로 시작하는 경우에만 명령 행을 실행하십시오.
xargs -p
너무 많이 사용하여 그것을 복사 할 것을 좋아합니다.
touch "a very long file name
입력 한 후 Enter를 누르십시오. 줄 연속을보고 간단히 닫는 따옴표를 입력하고 Enter를 다시 누르십시오. tadaa, 파일 이름의 줄 바꿈. 긴 파일 이름을 다시 입력하는 게으름.
find
를 사용하여 POSIX 명령을 호환 가능 하게 만들 수 있습니다-exec printf '%s\0' {} +
. POSIX 전체를 호환 가능하게 만드는 방법이 있다고 생각하지 마십시오.