문자 "a"로 시작하는 디렉토리에서 모든 쉘 스크립트를 실행하십시오.

문자 "a"로 시작하는 디렉토리에서 모든 쉘 스크립트를 실행하십시오.

문자 "a"로 시작하는 디렉토리에 많은 쉘 스크립트가 있습니다. 이 모든 쉘 스크립트를 한 번에 실행하려면 어떻게 해야 합니까? 이것을 실행하기 위해 개발할 수 있는 다른 작은 스크립트가 있습니까?

답변1

명령줄:

for each in path_to_directory/a*.sh ; do bash $each ; done

예:

:~$ ll | grep \.sh
-rw-rw-r--  1 user user      1476 Май 25 16:07 123.sh
-rw-rw-r--  1 user user      1176 Май 25 16:09 222.sh
-rw-rw-r--  1 user user       419 Май 20 14:03 2.sh
-rw-rw-r--  1 user user       191 Май 20 17:50 3.sh
-rw-rw-r--  1 user user         9 Июн  2 11:53 a1.sh
-rw-rw-r--  1 user user         9 Июн  2 11:53 a2.sh

i:~$ cat  q1.sh
echo sadf
:~$ cat  a1.sh
echo 123
:~$ cat  a2.sh
echo 234

:~$ for each in ./a*.sh ; do bash $each ; done
123
234

또는 run-parts라는 명령줄 유틸리티를 사용할 수 있습니다. 이 도구는 디렉터리에 있는 여러 스크립트나 프로그램을 자동으로 검색하여 모두 실행할 수 있습니다.

예를 들어, 이름이 "a"로 시작하고 ".sh"로 끝나는 /etc의 모든 스크립트를 실행하려면 다음을 수행합니다.

$ run-parts --regex '^a.*\.sh$' /etc

"--test" 옵션을 사용하면 실제로 실행하지 않고도 실행될 스크립트의 이름을 인쇄할 수 있습니다. 이는 테스트 목적으로 유용합니다.

$ run-parts --test ./my_script_directory

답변2

find . -maxdepth 1 -type f -perm /111 -name 'a*' -exec {} \;

또는

find . -maxdepth 1 -type f -executable -name 'a*' -exec {} \;

이들 중 하나는 a소유자, 그룹 또는 기타 실행 비트가 설정된 현재 디렉터리(하위 디렉터리 제외)에서 시작하는 모든 파일 이름을 찾은 다음 실행을 시도합니다.

예를 들어 소유자 및 그룹 실행 비트만 설정되어 있고 사용자가 소유자도 그룹의 구성원도 아닌 경우 시도가 실패할 수 있으므로 "시도"라고 말합니다. 이 경우 파일을 실행할 수 있는 권한이 없습니다.

또 다른 가능한 실패 모드는 현재 쉘이 해석할 수 있는 스크립트만 실행할 수 있다는 것입니다. 따라서 awkor 로 perl시작하는 스크립트는 a실행되지 않습니다. 쉘 스크립트가 아니기 때문에 구문 오류로 인해 실패합니다.


또 다른 방법은 다음과 같습니다.

for f in ./a* ; do [ -x "$f" ] && [ ! -d "$f" ] && "$f" ; done

a쉘 스크립트, awk 스크립트, Perl 스크립트, 바이너리 파일 등 실행 파일의 유형에 관계없이 실행 파일로 시작하는(디렉토리가 아닌) 모든 것을 실행합니다 .

답변3

이것을 시도해 볼 수 있습니다 -

for i in a*; do file "$i"|grep -q 'script' && ./"$i"; done

설명하다-

  1. for i ...- 이것은 a로 시작하는 각 항목을 반복하는 for 루프입니다.
  2. file "$i"|grep ... 문서이 명령은 파일 유형을 표시합니다. "a"로 시작하는 다른 파일이나 디렉터리가 있을 수 있으므로 이는 필요합니다. 이것grep단어 찾기'스크립트' 파일 출력에서
  3. && ./"$i" ...검색이 통과되면grep성공하면 스크립트가 실행됩니다.

관련 정보