প্যাটার্ন দ্বারা আরএম মিলিং ফাইল নাম


1

আমার 42000+ প্রকল্প গুটেনবার্গের এপবস আছে। প্রায়ই একটি রিলিজ উভয় একটি ইমেজ সংস্করণ এবং একটি ইমেজ সংস্করণ আছে। একটি ছবি অনুলিপি থাকলে আমি কোনও ছবি কপি মুছে ফেলতে চাই।

...
pg16045-images.epub
pg16045.epub
pg506.epub
...

এই ক্ষেত্রে আমি pg16045.epub অপসারণ করতে চাই কারণ pg16045-images.epub বিদ্যমান, কিন্তু pg506.epub হিসাবে pg506-images.epub হিসাবে বিদ্যমান নেই।

আমি কিভাবে কমান্ড লাইন থেকে এই কাজ করতে পারেন? আমি টিসিএসএইচ শেল ব্যবহার করছি, তবে প্রয়োজন হলে আমি বাশে যেতে পারি।

উত্তর:


1

এই সব মুছে ফেলা epub ফাইল /somewhere তারা অনুরূপ আছে যদি recursively -images ফাইল।

find /somewhere -name '*-images.epub' -exec bash -c '
    f="${0//-images/}"
    [[ -f "$f" ]] && echo rm -- "$f"
' {} \;

অপসারণ echo যখন আপনি নিশ্চিত এটি সঠিক।


আমি অপসারণ করার আগে ফাইল এর অস্তিত্ব পরীক্ষা করার প্রয়োজন নেই মনে হবে: যদি "খুঁজে" অবস্থিত আছে -images ফাইল, তারপর অবশ্যই একটি ব্যাকআপ আছে।
MariusMatutiae

বিন্দু কোন সহগামী হতে পারে .epub ছাড়া ফাইল -images, তাই যে শুধু বিরুদ্ধে একটি সুরক্ষার। একটি rm -f একই কাজ হবে।
slhck

0

এটি আপনার সমস্ত ' -images.epub 'এবং তারপর সংশ্লিষ্ট মুছে ফেলার চেষ্টা করে' .epub 'ডিরেক্টরি, চেক না করেই এটি বিদ্যমান থাকে বা না।

#!/bin/sh   

for d in *-images.epub ; do
  rmname=`echo "$d" | sed -e 's/\(.*\)-images\(\.epub\)/\1\2/'`
  echo rm "$rmname"
done

# end of file.

এটি আসলে কাজ করতে লাইনের শুরু থেকে 'ইকো' সরান। প্রথমে কমান্ডগুলিকে টার্মিনালে প্রতিস্থাপন করা এবং এটি এমন জিনিসগুলি করার আগে আপনি কী চান তা দেখতে ভাল ধারণা।


ভাল :) ... কিন্তু এটি এখনও ব্যর্থ কারণ $d - অ্যাসাইনমেন্ট rmname উদ্ধৃত করা হয় না। (সম্ভবত এখানে কোনও ব্যাপার নেই, কারণ ফাইলের নামগুলি সরল বলে মনে হচ্ছে, কিন্তু যদি কেউ এটি বিভিন্ন উদ্দেশ্যে ব্যবহার করে।)
slhck

0

এটি সম্ভবত একটি tad shortorter:

 find /path/to/target/directory -name '*images.epub' -exec sh -c ' echo '{}' | sed 's/-images//' | xargs  echo rm -f  ' \;

কেন xargs -0 যখন ইনপুট xargs এটি না NUL -delimited?
slhck

ঠিক আছে ... আমি ঠিক করেছি, কখনও কখনও আমি শুধু এনট্রপি তৈরি করি। কিছু প্রয়োজন?
MariusMatutiae

0

যে কৌতুক করা উচিত

DIR="/home/xyzuser/testdir"
for i in $(ls "$DIR");
do
  if [[ "$i" == *.images.epub  ]]
  then
    var=${i%.*}
    var=${var%.*}
    if [[ -f "$DIR/$var.epub" ]]
    then
      rm "$DIR/$var.epub"
    fi
  fi
done

আপনার ফাইল যেখানেই ডিআইআর মান পরিবর্তন করুন। আপনি যদি এই স্ক্রিপ্টটি কোনও ফাইলে সংরক্ষণ করছেন তবে এটি কার্যকর করার জন্য ভুলবেন না

chmod +x filename.sh
। অন্যথা, আপনি এটি চালাতে পারবেন না। এটা মূলত কি না।
  1. সব ফাইল (নাম) s মাধ্যমে loops
  2. যদি কোন ফাইলটিতে "images.pub" থাকে তবে এটির ফাইল নাম থেকে ".images.epub" অংশটি কেটে দেয়
  3. তারপর ".epub" প্রত্যয় (শেষ অংশ) সহ কোনও ফাইল বর্তমান ".images.epub" ফাইলের উপসর্গ (অংশটি শুরু করুন) আছে কিনা তা পরীক্ষা করে। এবং যদি পাওয়া যায়, এটা মুছে ফেলা।

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