আমি কীভাবে একটি সম্পূর্ণ ডিরেক্টরিকে কার্যকর করতে পারি?


14

আমার কাছে পাইথন স্ক্রিপ্টগুলিতে নিবেদিত একটি পুরো ফোল্ডার রয়েছে।

আমি লিখি প্রতিটি নতুন অজগর স্ক্রিপ্ট chmod করতে ক্লান্ত।

আমার ফোল্ডারের প্রতিটি ফাইল যদি অজগর স্ক্রিপ্ট হয় তবে তা কার্যকর করার উপায় আছে?

একটি স্ক্রিপ্ট পাওয়া ভাল লাগবে যা যখনই একটি নতুন .পি স্ক্রিপ্ট তৈরি হয় এবং যদি সেখানে একটি নতুন .পি স্ক্রিপ্ট থাকে তবে এটি ঠিক সেখানেই কার্যকর করা যায় che

  • আমি ভিম ব্যবহার করি

এই স্ক্রিপ্টগুলি লিখতে আপনি কী ব্যবহার করেন? আপনার পক্ষে এটি কনফিগার করা vimবা করা সম্ভব হবে emacs
মুরু

আমি ভিএম ব্যবহার করি এবং এটি নিখুঁত হবে।
ডোমিনিসি

ডিরেক্টরিতে সাবফোল্ডার আছে?
জ্যাকব ভিলিজম

কোনও সাবফোল্ডার কেবল আমার স্ক্রিপ্ট নেই।
ডোমিনিসি

উত্তর:


10

আর একটি ভাল বিকল্প হ'ল ইনক্রন । এটি একটি নির্দিষ্ট অবস্থানের জন্য নির্দিষ্ট শর্তাদি সহ inotify এ কাজ করে।

সুতরাং আমি বলতে পারি এই ফোল্ডারটি দেখুন, আপনি যখন কোনও ফাইল তৈরি দেখেন, একটি কমান্ড চালান।

যেমন একটি নমুনা মুখোমুখি ...

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

.pyপ্রয়োজন অনুসারে এক্সটেনশানগুলি দ্বারা ফিল্টার করার জন্য বাশ স্ক্রিপ্টের আর্গুমেন্ট হিসাবে একইভাবে পথ / ফাইলটি ব্যবহার করা যেতে পারে ।


লোকেরা ইতিমধ্যে ধন্যবাদ বলার জন্য ইতিমধ্যে উত্তর দেওয়া প্রশ্নগুলিতে ফিরে আসে কিনা তা নিশ্চিত নয় ... তবে যাইহোক। আমি এখানে নতুন, কে যত্নশীল। অনেক ধন্যবাদ তাই ধন্যবাদ। আমি এখনই যে বিষয়গুলিতে কাজ করছি তার সবকিছুর জন্য আমি ইনক্রন ব্যবহার করছি।
ডোমিনিসি

কোনও উদ্বেগ নেই, গ্ল্যাড এটি দরকারী হয়েছে। :) প্রকল্পটি এক ধরণের অস্পষ্ট, তাই আমি এটি মানুষের সাথে ভাগ করে নিতে চাই। আমি এটি সমস্ত ধরণের জিনিস স্বয়ংক্রিয় করতে এবং পাইপলাইনে দুর্দান্ত ব্যবহার করেছি।
DivinusVox

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

.pyডিরেক্টরি / পথ / টু / পাইথন / স্ক্রিপ্টস / ডির ডিরেক্টরিতে চলমান সমস্ত ফাইল তৈরি করবে ।

আপনার বর্ণনা অনুসারে আমি কোনও অটো-সরঞ্জাম সম্পর্কে সচেতন নই। আপনার সম্পাদকে এমন ম্যাক্রো পাওয়া সম্ভব হতে পারে যা এটি করতে পারে তবে আমি যে সম্পাদকটি ব্যবহার করি তার সাথে নয়। ;-)


4
পয়েন্টার জন্য ধন্যবাদ। ওপি বিশেষত পাইথন স্ক্রিপ্টগুলি বলেছিল, তাই এজন্য আমি অন্তর্ভুক্ত করি *.py। আমি এটিও ধরে নিচ্ছি যে ওপিএস স্ক্রিপ্টগুলি তার মানক ইউজারআইডি-র মালিকানাধীন, তাই এর প্রয়োজনীয়তা আমি দেখছি না sudo। সবার জন্য শুভ কামনা.
শেল্টার

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


1

এখানে কয়েকটি কমান্ডের সাহায্যে কিছু তথ্য যা সহায়তা করতে পারে, http://ss64.com/bash/syntax-perferences.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আপনার মধ্যে রাখুন $PATHmkscript.shঅজগর স্ক্রিপ্টগুলি যেখানে সঞ্চিত রয়েছে সেগুলি কার্যক্ষম ডিরেক্টরি থেকে চালিত করুন । স্ক্রিপ্টটি কিছু দরকারী শিরোনামের তথ্য তৈরি করে, স্ক্রিপ্ট শিরোনাম করে এবং এটি সম্পাদনযোগ্য করে তোলে এবং তারপরে নির্বাচিত সম্পাদকটি খোলে; আপনার ক্ষেত্রে ভিআইএম।

আমি সংশোধন করেছি 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.