전체 디렉토리를 실행 가능하게하려면 어떻게해야합니까?


14

파이썬 스크립트 전용 폴더가 있습니다.

나는 내가 쓰는 모든 새로운 파이썬 스크립트에서 chmod를하는 데 지쳤다.

파이썬 스크립트 인 경우 폴더 내의 모든 파일을 실행 가능하게 만드는 방법이 있습니까?

새 .py 스크립트가 작성 될 때마다 확인하는 스크립트를 작성하는 것이 좋으며 새 .py 스크립트가 있으면 즉시 실행 가능하게 만듭니다.

  • Vim을 사용합니다.

이 스크립트를 작성하기 위해 무엇을 사용합니까? 구성 vim하거나 emacs수행 할 수 있습니다.
muru

나는 vim을 사용한다. 그리고 그것은 완벽 할 것입니다.
Dominici

디렉토리에 하위 폴더가 있습니까?
Jacob Vlijm

내 스크립트에만 하위 폴더가 없습니다.
Dominici

답변:


10

또 다른 좋은 옵션은 Incron 입니다. 주어진 위치에 대해 지정 가능한 조건으로 inotify에서 작동합니다.

따라서이 폴더를 보면서 파일이 생성되면 명령을 실행하십시오.

샘플 incrontab처럼 ...

/path/to/scripts IN_CREATE chmod +x $@$#  # <--- this arcane bit is path ($@) + file ($#)

마찬가지로 경로 / 파일을 bash 스크립트의 인수로 사용하여 .py필요한 경우 확장명 별로 필터링 할 수 있습니다 .


사람들이 이미 감사의 말을하기 위해 이미 답변 한 질문으로 돌아 왔는지 확실하지 않지만 어쨌든. 나는 여기 새로운 사람입니다. 정말 고마워요 나는 지금 작업중 인 거의 모든 일에 incron을 사용하고 있습니다.
Dominici

걱정하지 마세요. 유용했습니다. :) 프로젝트가 불분명하므로 사람들과 공유하는 것을 좋아합니다. 나는 모든 종류의 것들을 자동화하고 파이프 라인하기 위해 그것을 사용했습니다.
DivinusVox

5
chmod +x /path/to/python/scripts/dir/*.py 

/ path / to / python / scripts / dir.py 디렉토리의 모든 현재 파일을 실행 가능하게 만듭니다 .

나는 당신이 설명하는 자동 도구를 모른다. 편집기에 매크로를 사용 하여이 작업을 수행 할 수는 있지만 사용하는 편집기로는 사용할 수 없습니다. ;-)


4
포인터 주셔서 감사합니다. OP는 구체적으로 파이썬 스크립트를 말했기 때문에 내가 포함하는 이유 *.py입니다. 또한 OPs 스크립트는 표준 사용자 ID가 소유하고 있다고 가정하므로에 대한 필요성이 표시되지 않습니다 sudo. 모두에게 행운을 빕니다.
shellter

1

첫 번째 단계로 다음을 시도해 볼 수 있습니다 ~/.vimrc.

autocmd BufWritePost *.py silent execute "! chmod +x %"
  • chmod +x파일에 .py쓸 때 모든 파일 의 파일 이름으로 실행됩니다 . 이벤트 목록 ( :h events)을 보면 파일이 생성 되는 이벤트를 찾을 수 없으므로 파일을 쓸 때마다 실행하도록 설정해야합니다.
  • 를 처음 chmod적용하면 파일이 변경되고 다음과 같이 vim경고합니다.

    "test.py" [New] 0L, 0C written
    W16: Warning: Mode of file "test.py" has changed since editing started
    See ":help W16" for more info.
    [O]K, (L)oad File:

    나는 autoread이 변화 를 위해 몇 가지 트릭을 시도 했지만 운이 없다. 따라서 Enter두 번 눌러야 합니다.


1

시작되면 아래 스크립트는 디렉토리에서 주어진 유형 (확장자)의 모든 파일의 권한을 한 번에 자동으로 변경합니다. 그런 다음 스크립트는 5 초마다 디렉토리에 새로 추가 된 파일이 있는지 확인 하고 파일이 지정된 유형 (이 경우 .py파일) 인 경우 권한을 변경합니다.

여기에는 몇 가지 옵션이 있습니다.이 경우 새로 추가 된 파일을 실행 가능하게 만들지 만 행에 정의 된대로 다른 작업도 가능합니다 command = "chmod +x". 또한 작업을 수행 할 파일 종류 (언어 확장명)를 정의 (변경) 할 수 있습니다.

사용하는 방법

아래 스크립트를 빈 파일로 복사하십시오. 다른 이름으로 저장하고 change_permission.py다음 명령으로 백그라운드에서 실행하십시오.

python3 <script> <folder_to_watch>

스크립트

#!/usr/bin/env python3

import subprocess
import time
import sys

directory = sys.argv[1]
command = "chmod +x"; check_interval = 5; extensions = (".py")

def current_files():
    read = subprocess.check_output(["ls", directory]).decode("utf-8").strip()
    return [item for item in read.split("\n") if item[item.rfind("."):] in extensions]

initial_files = current_files()
for file in initial_files:
    subprocess.call(["/bin/bash", "-c", command+" "+directory+"/"+file])

while True:
    update = current_files()
    for file in update:
        if not file in initial_files:
            subprocess.call(["/bin/bash", "-c", command+" "+directory+"/"+file])  
    initial_files = update
    time.sleep(check_interval)

* 참고 : sudo 권한이 필요한 경우 다음을 사용하여 스크립트를 실행하십시오. sudo


1

다음은 도움이 될 수있는 몇 가지 명령이있는 정보입니다. http://ss64.com/bash/syntax-permissions.html

find . -type f -print0 | xargs -0 chmod 775 # change all file permissions in current directory

find . -type d -print0 | xargs -0 chmod 755 # change directory permissions

다음 헤더 스크립트를 사용할 수 있습니다. 장소 mkscript.sh당신에 $PATH. mkscript.sh파이썬 스크립트가 저장된 작업 디렉토리에서 실행 하십시오. 스크립트는 유용한 헤더 정보를 생성하고 스크립트 제목을 지정하여 실행 가능하게 한 다음 선택한 편집기를 엽니 다. 귀하의 경우에는 VIM.

수정 mkscript.sh했습니다. 파이썬 확장명을 가진 스크립트를 생성합니다.*.py

변수 ${PYTHON_VERSION}가 호출 PYTHON_VERSION="/usr/bin/python --version"되어 /etc/environment파일 에 추가되었습니다 . 한 번 봐 가지고 https://help.ubuntu.com/community/EnvironmentVariables을

#!/bin/bash -       
#title           :mkscript.sh
#description     :This script will make a header for a PYTHON script.
#author      :bgw
#date            :20111101
#version         :0.4    
#usage       :bash mkscript.sh
#notes           :Install Vim and Emacs to use this script.
#bash_version    :4.1.5(1)-release
#==============================================================================

today=$(date +%Y%m%d)
div=======================================

/usr/bin/clear

_select_title(){

    # Get the user input.
    printf "Enter a title: " ; read -r title

    # Remove the spaces from the title if necessary.
    title=${title// /_}

    # Convert uppercase to lowercase.
    title=${title,,}

    # Add .sh to the end of the title if it is not there already.
    [ "${title: -3}" != '.py' ] && title=${title}.py

    # Check to see if the file exists already.
    if [ -e $title ] ; then 
        printf "\n%s\n%s\n\n" "The script \"$title\" already exists." \
        "Please select another title."
        _select_title
    fi

}

_select_title

printf "Enter a description: " ; read -r dscrpt
printf "Enter your name: " ; read -r name
printf "Enter the version number: " ; read -r vnum

# Format the output and write it to a file.
printf "%-16s\n\
%-16s%-8s\n\
%-16s%-8s\n\
%-16s%-8s\n\
%-16s%-8s\n\
%-16s%-8s\n\
%-16s%-8s\n\
%-16s%-8s\n\
%-16s%-8s\n\
%s\n\n\n" '#!/usr/bin/python -' '#title' ":$title" '#description' \
":${dscrpt}" '#author' ":$name" '#date' ":$today" '#version' \
":$vnum" '#usage' ":./$title" '#notes' ':' '#python_version' \
":${PYTHON_VERSION}" \#$div${div} > $title

# Make the file executable.
chmod +x $title

/usr/bin/clear

_select_editor(){

    # Select between Vim or Emacs.
    printf "%s\n%s\n%s\n\n" "Select an editor." "1 for Vim." "2 for Emacs."
    read -r editor

    # Open the file with the cursor on the twelth line.
    case $editor in
        1) vim +12 $title
            ;;
        2) emacs +12 $title &
            ;;
        *) /usr/bin/clear
           printf "%s\n%s\n\n" "I did not understand your selection." \
               "Press <Ctrl-c> to quit."
           _select_editor
            ;;
    esac

}

_select_editor
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.