নামে স্থান সহ ফাইলগুলি


4

আমার কাছে ভেরিয়েবল ভেরিয়েবল রয়েছে যা একটি ডিরেক্টরিতে ফাইলের তালিকা সঞ্চয় করে। আমি সমস্ত ফাইল লুপ করি এবং যদি আমি কোনও ডিরেক্টরি পাই তবে আমি স্ক্রিনে "ডিরেক্টরি" আউটপুট পাই। নীচে কোড:

var=$(ls dir)

for file in $var; do
    if [ -d $dir/$file ]; then
        echo "Directory"
    fi
done

আমার 2 টি প্রশ্ন রয়েছে:

1 ম- আমি এটি একটি ফাংশনের অভ্যন্তরে করছি এবং আমি ফাইলের ভেরিয়েবল স্থানীয় থাকতে চাই যাতে আমার ফাংশনটি শেষ হয়ে গেলে আমি এতে অ্যাক্সেস না পাই। আমি কীভাবে সেই পরিবর্তনশীল স্থানীয় সেট করতে পারি? আমি করতে পারি না for local file in $var;এবং লুপের আগে-ফাইলটি ঘোষণা করতে পারি না।

২ য়- $(ls dir)নামের ভিতরে একটি স্থান থাকা কোনও ফাইল থাকাতে আমার লুপ কাজ করে না। উদাহরণস্বরূপ যদি $dir3 ফাইল, ফাইল 1 ফাইল 2 এবং ফাইল 3 থাকে $varতবে কেবল ফাইল 1 এবং ফাইল 3 কে আসল ফাইল হিসাবে ধরে রাখতে পারে তবে ফাইল 2 কাজ করবে না কারণ এটি ফাইল এবং 2 এ পৃথক করবে space তাদের নামে?


2
জায়গার জন্য, চারদিকে ডাবল কোট রাখুন "$file"। আরও জটিল পরিস্থিতিতে আপনাকে ব্যবহার করতে হতে পারে $"$file"
ফ্রাঙ্ক থমাস

আমি চেষ্টা করেছিলাম কিন্তু এটি কার্যকর হয়নি কারণ আমি ইতিমধ্যে $ (ls dir) থেকে স্থান পাচ্ছি, সুতরাং আমি যখন আমার পরিবর্তনশীল ফাইলটি শুরু করব তখনই আমি স্থানটি বিবেচনায় নিয়ে যাচ্ছি।
এফএক্সবায়েজ

3
ব্যবহার করে দেখুন ls -Q dir। এটি প্রতিটি ফাইলের নামের চারপাশে উদ্ধৃতি দেবে। এই সমস্যাটি কেন লোকেরা lsআউটপুট পার্সিং এড়াতে এবং পরিবর্তে ব্যবহারের পরামর্শ দেওয়া হয় তার একটি অংশ find
ফ্র্যাঙ্ক থমাস

উত্তর:


3

$ ফাইল স্থানীয় করার জন্য: আপনি local fileএটি নির্ধারণের আগে ব্যবহার করতে পারেন ।

স্পেস সহ ফাইলগুলির জন্য: ls কে পার্স করবেন না , একটি ওয়াইল্ডকার্ড ব্যবহার করবেন না এবং ভেরিয়েবল রেফারেন্সের আশেপাশে ডাবল-কোট ব্যবহার করুন:

local file
for file in "$dir"/*; do  # Note that $file will contain $dir as well as the filename
    if [ -d "$file" ]; then
        echo "Directory: $file"
    fi
done

লুপটি শুরু করার আগে আপনি যদি ফাইলের নাম সংরক্ষণ করতে চান তবে একটি সরল ভেরিয়েবলের পরিবর্তে একটি অ্যারে ব্যবহার করুন:

local -a filelist
filelist=("$dir"/*)
local file
for file in "${filelist[@]}"; do
    ...

দেখুন BashFAQ # 20: "আমি খুঁজে পেতে এবং নিরাপদে সব ব্যবস্থা করতে সক্ষম কিভাবে ফাইল নতুন লাইন, স্পেস বা উভয় ধারণকারী নাম?" আরও জটিল উদাহরণ এবং আরও কৌশল জন্য।

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