বর্তমান ফোল্ডারে সব ফাইল এবং ডিরেক্টরি নামকরণ কিভাবে?


4

আমি এই মত একটি ডিরেক্টরি গঠন আছে:

./
  whatever/
    foos_whatever.ext
  something/
    foo/
      1.ext
      2.ext
  another/
    foo.ext

আমি সব ফাইল পুনঃনামকরণ করতে চান এবং ধারণকারী ডিরেক্টরি foo। আমি প্রতিস্থাপন করতে চাই foo সঙ্গে bar

এখানে আমি চেষ্টা করছি:

[naomi ~/app]$ find . -name '*foo*' -exec f={} && mv -v f ${f/foo/bar} \;

এই ত্রুটিটি আমি গ্রহণ করছি:

find: -exec: no terminating ";" or "+"

কোন সাহায্যের জন্য ধন্যবাদ: ডি

উত্তর:


2

সুস্পষ্ট ভাবে আমি মনে করি আপনি এটি হবেন:

find -name "*foo*" -exec rename s/foo/bar/ {} \;

অথবা xargs দিয়ে, যদি আপনার নাম পরিবর্তন করতে অনেক ফাইল থাকে:

find -name "*foo*" | xargs -I '{}' rename s/foo/bar/ '{}'

যাইহোক, সমস্যাটি হল, যদি আপনার কোন ডিরেক্টরি গঠন থাকে যা এমন কিছু দেখায়:

.
|-- fooDir
|   |-- foo.txt
|   `-- abc
`-- foo2

এটি foo.txt পুনঃনামকরণে ব্যর্থ হবে, কারণ এটি প্রথমে বারদিরতে fooDir নামকরণ করবে এবং তারপরে এটি "fooDir / foo.txt" খুঁজে পাবে না বলে দাবি করবে।

আপনি কোন ত্রুটি কাজ না হওয়া পর্যন্ত কমান্ড পুনরায় চালানো কিন্তু এটা পঙ্কিল। আরেকটি উপায় হ'ল একটি লুপে কমান্ডটি চালানো হবে, একবার আপনার ডিরেক্টরি ট্রি গভীরতার প্রতিটি স্তরের জন্য find অপশন -mindepth এবং -maxdepth অন্যান্য স্তর বাদ দিতে সেট করুন, কিন্তু তারপর আপনার ডিরেক্টরি সিস্টেমের গভীরতা জানতে হবে।

আমি একটি ভাল উপায় মনে করতে পারেন না।


2

আপনি যে মত কমান্ড চেইন ব্যবহার করতে পারবেন না -exec, শেল তাদের ধারাবাহিকতা হিসাবে ব্যাখ্যা করে find নিজেই। হয় একটি subshell মধ্যে চেইন চালান, বা ব্যবহার rename অথবা prename পরিবর্তে ফাইলের নামকরণ করা।


Vasquez-Abrams, আমি শেল সঙ্গে খুব অভিজ্ঞ না। আপনি কিভাবে এই কাজ করা হবে আমাকে দেখাতে পারেন?
user633183

1
জন্য rename এবং prename, তাদের নিজ নিজ মানুষের পৃষ্ঠা দেখুন। Subshell জন্য: stackoverflow.com/questions/5810296/...
Ignacio Vazquez-Abrams
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.