linux - ইউনিক্স-ফোল্ডার এবং ফাইল পাথ তৈরি করুন




bash shell (8)

আমি জানি যে আপনি একটি ডিরেক্টরি তৈরি করতে এবং একটি ফাইল তৈরি করতে touch করতে mkdir করতে পারেন, তবে একযোগে উভয় অপারেশন করার কোন উপায় নেই?

অর্থাৎ যদি ফোল্ডারটি other অস্তিত্ব না থাকে তবে আমি নীচের কাজটি করতে চাই:

cp /my/long/path/here/thing.txt /my/other/path/here/cpedthing.txt

ত্রুটি:

cp: cannot create regular file `/my/other/path/here/cpedthing.txt': No such file or directory

কেউ এই জন্য একটি কাজকর্ম হিসাবে একটি ফাংশন সঙ্গে আসে?

https://code.i-harness.com


আপনি দুটি পদক্ষেপে এটি করতে পারেন:

mkdir -p /my/other/path/here/
touch /my/other/path/here/cpedthing.txt

আপনি প্রথম সব প্যারেন্ট ডিরেক্টরি তৈরি করতে হবে।

FILE=./base/data/sounds/effects/camera_click.ogg

mkdir -p "$(dirname "$FILE")" && touch "$FILE"

আপনি সৃজনশীল পেতে চান, আপনি একটি ফাংশন করতে পারেন :

mktouch() {
    if [ $# -lt 1 ]; then
        echo "Missing argument";
        return 1;
    fi

    for f in "[email protected]"; do
        mkdir -p -- "$(dirname -- "$f")"
        touch -- "$f"
    done
}

এবং তারপর এটি অন্য কোন কমান্ড ব্যবহার করুন:

mktouch ./base/data/sounds/effects/camera_click.ogg ./some/other/file

এই আমি কি করতে হবে:

mkdir -p /my/other/path/here && touch $_/cpredthing.txt

এখানে, $_ একটি পরিবর্তনশীল যা পূর্ববর্তী কমান্ডের শেষ বিজয়ের প্রতিনিধিত্ব করে যা আমরা লাইনে কার্যকর করেছি।

আউটপুটটি কী হতে পারে তা আপনি যদি সর্বদা দেখতে চান তবে echo কমান্ডটি ব্যবহার করে আপনি এটি পরীক্ষা করতে পারেন:

echo mkdir -p /code/temp/other/path/here && echo touch $_/cpredthing.txt

যা আউটপুট হিসাবে:

mkdir -p /code/temp/other/path/here
touch /code/temp/other/path/here/cpredthing.txt

বোনাস হিসাবে, আপনি একাধিক ফাইল একবারে বক্র বিস্তার ব্যবহার করে লিখতে পারেন, উদাহরণস্বরূপ:

mkdir -p /code/temp/other/path/here &&
touch $_/{cpredthing.txt,anotherfile,somescript.sh}

আবার, echo সঙ্গে সম্পূর্ণ testable:

mkdir -p /code/temp/other/path/here
touch /code/temp/other/path/here/cpredthing.txt /code/temp/other/path/here/anotherfile /code/temp/other/path/here/somescript.sh

এক শেল লাইনে দুটি কমান্ড একত্রিত করতে && ব্যবহার করুন

COMMAND1 && COMMAND2
mkdir -p /my/other/path/here/ && touch /my/other/path/here/cpedthing.txt

দ্রষ্টব্য: পূর্বে আমি ব্যবহারের সুপারিশ ; দুটি কমান্ড আলাদা করার জন্য কিন্তু @ ট্রাইসিস দ্বারা নির্দেশিত হিসাবে এটি সম্ভবত বেশিরভাগ ক্ষেত্রে COMMAND1 ব্যবহার করতে ভাল কারণ COMMAND1 ব্যর্থ হলে COMMAND2 হবে না। (অন্যথা এটি এমন সমস্যার সম্মুখীন হতে পারে যা আপনি প্রত্যাশিত নাও হতে পারে।)


বিশেষ (কিন্তু অসাধারণ) ক্ষেত্রে যেখানে আপনি একই ডিরেক্টরি অনুক্রমটি পুনরূদ্ধার করার চেষ্টা করছেন, cp --parents উপকারী হতে পারে।

উদাহরণস্বরূপ, যদি /my/long সোর্স ফাইলগুলি থাকে এবং my/other ইতিমধ্যে বিদ্যমান থাকে তবে আপনি এটি করতে পারেন:

cd /my/long
cp --parents path/here/thing.txt /my/other

যদি আপনি শুধুমাত্র 1 প্যারামিটার স্নিপেট দিয়ে সহজ চান:

rm -rf /abs/path/to/file;  #prevent cases when old file was a folder
mkdir -p /abs/path/to/file; #make it fist as a dir
rm -rf /abs/path/to/file; #remove the leaf of the dir preserving parents 
touch /abs/path/to/file; #create the actual file


if [ ! -d /my/other ]
then
   mkdir /my/other/path/here
   cp /my/long/path/here/thing.txt /my/other/path/here/cpedthing.txt
fi





scripting