2017-12-21 9 views
0

현재 파일의 모든 파일을 가져 와서 일반 파일인지 폴더인지 확인하고 사용 권한을 설정하는 스크립트를 만들었습니다.이름에 공백이있는 숨김 파일 및 폴더 작업

내 문제는 숨겨진 파일 \ 폴더 및 이름에 공백이있는 files \ folders가있는 경우입니다. 여기

#!/bin/bash 
FILES=$(pwd)/* 
for f in $FILES 
    do 
    if [ -f $f ]; then chmod u+x $f; fi 
    if [ -d $f ]; then chmod u=w,g+r,o-rwx $f; fi 
done 

내가 테스트 컴퓨터에서 얻을 오류의 예는 다음과 같습니다 : 여기

내 스크립트

'테스트/.bwhajtbzmu xswxcgqsvz'잘못된 ​​권한이 있습니다, 250을 예상을 414있어

기타 오류는 기본적으로 같습니다.

실제로 숨겨진 파일이거나 이름에 공백이있는 경우 여기에서 문제가 무엇인지 확실하지 않습니다. 나는 두 가지 모두 문제라고 생각한다.

숨김 파일과 이름에 공백이있는 파일을 사용할 수 있도록 스크립트를 수정하려면 어떻게해야합니까?

감사합니다.

PS입니다. 스크립트의 유용성에 의문을 제기하지 마십시오. 학교 숙제입니다.

+0

"숨김"이란 무엇을 의미합니까? Unix에서 숨겨진 파일은 점 ('.')으로 시작하는 파일입니다. 그러나 당신의 설명은 이것들을 언급하지 않습니다. – Alfe

+0

왜 안 되겠습니까?'find $ (pwd) -type d -not -name. -exec chmod u = w, g + r, o-rwx "{}"\;'와'find $ (pwd) -type f -exec chmod u + x "{}" – masseyb

답변

3

파일 이름에서 공백을 처리하는 것은 까다 롭습니다. 첫 번째 규칙은 다음과 같습니다. 주위의 큰 따옴표 사용 변수. 그렇지 않으면 쉘은 스페이스를 분리. 자로 해석합니다. 불행히도 단순히 변수로 목록을 보유 할 수는 없습니다. 이를 위해 배열 변수를 사용해야합니다. 가장 (는 달리하지 않는) *는 이러한 일치하게 쉘 옵션 dotglob를 설정해야합니다 (사람이 점 .로 시작) 숨겨진 파일과 폴더를 처리하기위한

#!/bin/bash 

FILES=("$(pwd)"/*) 

for f in "${FILES[@]}" 
do 
    if [ -f "$f" ]; then chmod u+x "$f"; fi 
    if [ -d "$f" ]; then chmod u=w,g+r,o-rwx "$f"; fi 
done 

. (정상적으로 싶어하지 않으며 .??* 같은 것들을 일반적으로 수배 .a 같은 물건을 일치하지 것이다 또한 ... 일치로 .*를 사용하는 것은 좋지 않다.) :

shopt -s dotglob 
FILES=("$(pwd)"/*) 
shopt -u dotglob 

나는 그것을 떠나 권하고 싶지 않다 그래서 사용 후 스위치를 끕니다.

+0

왜'pwd'가 좋을까요? 또한 숨겨진 파일들조차도'shopt -s dotglob'를 추가 할 수 있습니다. – PesaThe

+0

Q. OP가 대신이 파일 이름의 임의의 목록을 사용할 계획 일 수 있습니다. 그렇지 않으면'for f in * '이면 충분합니다. – Alfe

+0

@ 페사 The dotglob : 그렇습니다.하지만 OP는 실제로 대부분의 사람들이 "숨겨진"파일로 이해하는 것을 의미하지 않는다는 느낌을 어떻게 든 가지고 있습니다. 적어도 그는 설명에서이 점을 언급하지 않았으므로 오히려 이것에 대한 설명을 요구했다. – Alfe