`Mkdir -p` এর জন্য আর্গুমেন্ট তালিকা তৈরি করতে প্যারামিটার সম্প্রসারণ ব্যবহার করা`


10

আমার এরকম কিছু রয়েছে:

% ls -1dF /tmp/foo/*
/tmp/foo/000f9e956feab3ee4625aebb65ae7bae9533cdbc/
/tmp/foo/002e34c2218f2c86fefd2876f0e5c2559c5fb3c4/
/tmp/foo/00b483576791bab751e6cb7ee0a7143af43a8069/
.
.
.
/tmp/foo/fedd0f7b545e7ae9600142656756456bc16874d3/
/tmp/foo/ff51ac87609012137cfcb02f36624f81cdc10788/
/tmp/foo/ff8b983a7411395344cad64182cb17e7cdefa55e/

আমি barপ্রতিটি সাবডাইরেক্টরির অধীনে একটি ডিরেক্টরি তৈরি করতে চাই foo

আমি যদি এই সাথে চেষ্টা করার চেষ্টা করি

% mkdir -p /tmp/foo/*/bar

... আমি ত্রুটি পেয়েছি

zsh: no matches found: /tmp/foo/*/bar

(পর্দার দৃষ্টিতে আমি ত্রুটির কারণ বুঝতে পারি))

আমি জানি যে আমি একটি লুপের সাহায্যে মূল সমস্যাটি সমাধান করতে পারি, তবে আমি জানতে আগ্রহী zshযে প্যারামিটার সম্প্রসারণের এমন কোনও রূপকে সমর্থন করে যা এর একক অনুরোধের জন্য কাঙ্ক্ষিত যুক্তি তৈরি করতে পারে mkdir -p। আইওডাব্লু, " /barপ্রসারিত দ্বারা উত্পন্ন প্রতিটি উপসর্গের সাথে যুক্ত" এর সমতুল্য একটি প্যারামিটার সম্প্রসারণ /tmp/foo/*, যার ফলস্বরূপ

% mkdir -p /tmp/foo/000f9e956feab3ee4625aebb65ae7bae9533cdbc/bar ... /tmp/foo/ff8b983a7411395344cad64182cb17e7cdefa55e/bar

উত্তর:


13
setopt histsubstpattern extendedglob
mkdir -p /tmp/foo/*(#q/:s_%_/bar_)

এই হয় globbing বর্ধিত করে একটি হয়েছে quiet উল্লিখিত glob পতাকা একটি ব্যবহার করে উল্লিখিত glob কোয়ালিফায়ার শুধুমাত্র ডিরেক্টরি এবং মেলে পরিবর্তক একটি সম্পাদনের জন্য substitution (ব্যবহার %প্যাটার্ন চরিত্র যে কেবল প্রাপ্তিসাধ্য ইতিহাস প্রতিকল্পন প্যাটার্ন মোড) প্রতিটি শব্দ একটি স্ট্রিং appends।

man zshexpn

বাহ, আমি মুগ্ধ। এমনকি আপনার নির্দিষ্ট করা ম্যান পেজেও আমি এটি পেয়েছি।
ওয়াইল্ডকার্ড

1
নোট করুন যে অরিজিনাল পোস্টারটি নির্দিষ্ট করা হয়েছে mkdir -p, যা ত্রুটি নিক্ষেপ না করার আপনার কমান্ড থেকে কিছুটা আলাদা প্রভাব ফেলতে পারে যদি সেই ডিরেক্টরিগুলির মধ্যে কিছু ইতিমধ্যে barসাব-ডিরেক্টরি থাকে। মাইনর পয়েন্ট তবে এখানে লক্ষণীয়। :)
ওয়াইল্ডকার্ড

1
আর একটি উপায় হ'ল অ্যারে সম্প্রসারণটি ব্যবহার করে যা যা প্রসারিত হবে তার প্রতিটি উপাদানকে ${^spec}যুক্ত করুন : তারপরেbar/tmp/foo/*(/)set -- /tmp/foo/*(/)mkdir -p -- "${^@}/bar"
don_crissti

5

অবশ্যই - একটি লুপ ব্যবহার করুন

for n in /tmp/foo/*; do mkdir "$n/bar";done

গ্লোবগুলি বিদ্যমান আইটেমগুলির তালিকা প্রসারিত করতে ব্যবহৃত হয় , এমন জিনিস নয় যা এখনও তৈরি হয়নি।


দুঃখিত, আমি ভয় করি যে আমার প্রশ্নটি পরিষ্কারভাবে বর্ণিত হয়নি। আমি এটা পরিষ্কার করব।
kjo

2
zshকোনও একক বাক্য গঠন দিয়ে গ্লোবগুলি প্রসারিত করতে এবং পাঠ্য যুক্ত করতে পারলে এটির উত্তর দেয় না — তবে আমি মনে করি আপনি সম্ভবত যা চান এটি করার একমাত্র উপায়, @ কেজো jo
ওয়াইল্ডকার্ড

4

ডিরেক্টরিগুলি যদি একটি অ্যারেতে থাকে তবে আপনি ${^...}সম্প্রসারণের ফর্মটি ব্যবহার করতে পারেন ।

a=(/tmp/foo/*/)
mkdir -p ${^a}bar

0

আপনি এটি ব্যবহার findএবং করতে পারেন xargs:

find /tmp/foo -maxdepth 1 -mindepth 1 -type d | xargs -i echo mkdir -p {}/bar

যা লক্ষ্যমাত্রার উপ-ডিরেক্টরিতে এবং যথাক্রমে নিজে তৈরি করে -maxdepth 1এবং ব্যবহার -mindepth 1রোধ করে। এটি কেবল ডিরেক্টরি বিবেচনা করে তোলে।bar/tmp/footype d

echoসত্যিকারের ক্রিয়া সম্পাদন করতে আপনাকে অপসারণ করতে হবে, অন্যথায় সম্পাদনের জন্য echoকেবল লাইনগুলি মুদ্রণ করবে। আপনি এটি প্রয়োগের মতো বিকল্পটিতেও এটি বন্ধ করতে পারেন $()

ম্যানুয়াল বলেছেন xargs -iযে হ্রাস করা হয়েছে, তবে আমি অন্য কোনও সমানভাবে কার্যকর বিকল্প পাইনি, সুতরাং এটি এখনও কয়েক বছর ধরে কাজ করা উচিত ... আপনি এটির -iসাথে -I'{}'আপ-টু-ডেট থাকতে পারেন।


এই উত্তর এবং পরেরটি আমার কাছে ভাল দেখাচ্ছে। কেউ কেন তাদের ভোট দেওয়া উচিত তা ব্যাখ্যা করতে পারেন? ডাউন ভোট জরিমানা, তবে কোনও কারণ না দিলে আমরা কীভাবে শিখব?
জো

ওপি যা চেয়েছিল তা ছাড়া এটি কিছুই করা একটি বিকল্প বিকল্প। আমাকে মারছে।
loa_in_

আমি মনে করি এটি একধরনের পক্ষপাতদুষ্ট যে উত্তরগুলির অবশ্যই তাদের খারাপ উত্তর থাকতে পারে, সুতরাং কুসংস্কার এটি আমার খ্যাতির ক্ষতি করেছে।
loa_in_

আমি অব্যক্ত ভোট পছন্দ করি না, তবে আমি এরকম কোনও পক্ষপাতিত্ব দেখিনি। সাধারণত, "খারাপ" উত্তরগুলি (যেগুলি আমি বুঝতে পারি) আসলে খারাপ।
জো

0

@ লুয়া_ইন_ এর বেশিরভাগ অংশ ছিল, তবে পাইপিংয়ের findআউটপুটটি একটি ভুল প্যাস হিসাবে দেখা যায়।

find /tmp/foo -maxdepth 1 -mindepth 1 -type d -exec mkdir {}/bar \;

আমি কেবল xargsবিভিন্ন সরঞ্জামের সাথে ব্যবহার করি যার -execবিকল্প নেই, তাই আমি আমার পদ্ধতির ব্যবহার করি কারণ এটি সবার সাথে সমানভাবে কাজ করে।
loa_in_
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.