ফাইল এবং ডিরেক্টরিগুলির নাম পরিবর্তন করুন (উপসর্গ যুক্ত করুন)


137

আমি সমস্ত ফোল্ডার এবং ডিরেক্টরিতে উপসর্গ যুক্ত করতে চাই।

উদাহরণ:

আমার আছে

Hi.jpg
1.txt
folder/
this.file_is.here.png
another_folder.ok/

আমি উপসর্গ "PRE_" যুক্ত করতে চাই

PRE_Hi.jpg
PRE_1.txt
PRE_folder/
PRE_this.file_is.here.png
PRE_another_folder.ok/

শুভেচ্ছা সহ,


ব্যবহারের awk হিসাবে এই উত্তর করুন: awk '$ 0 = "উপসর্গ" $ 0' ফাইল> new_file
মার্ক

উত্তর:


224

পিটার ভ্যান ডের হেইজডেনকে ধন্যবাদ , এখানে একটি স্থান যা ফাঁকা রেখে ফাইলের জন্য কাজ করবে:

for f in * ; do mv -- "$f" "PRE_$f" ; done

("-" ড্যাশ দিয়ে শুরু হওয়া ফাইলগুলির সাথে সাফল্যের জন্য প্রয়োজন, যার নামগুলি অন্যথায় এমভি কমান্ডের সুইচ হিসাবে ব্যাখ্যা করা হবে)


হেই, সত্য, আপনার যদি কোনও স্থান সহ কোনও ফাইল থাকে তবে এটি সম্পূর্ণরূপে কাজ করবে না।
CanSpice

12
আপনি যদি lsকমান্ডটি পরিবর্তন করেন *এবং এতে আর্গুমেন্টের চারপাশে ডাবল কোটস রাখেন mv, এটি স্পেসযুক্ত ফাইলগুলির জন্য কাজ করবে।
পিটার ভ্যান ডের হাইজডেন

@ ক্যানস্পাইস কি একই ধরণের স্ক্রিপ্টের সাহায্যে এই ক্রিয়াকলাপটি (উপসর্গটি সরিয়ে) বিপরীত করা সম্ভব?
পাস্কেল কিউই

3
ধন্যবাদ বন্ধু. এখানে ইন্টার্ন তার 67 টি ফাইলের নাম পরিবর্তন করে আঙুলের ক্যাপগুলি আলগা করছিল। চিয়ার্স।
ফিলিপ

1
ড্যাশ দিয়ে শুরু হওয়া ফাইলগুলি থেকে রক্ষা করার জন্য এটি "এমভি -" হওয়া উচিত, অন্যথায় কমান্ড সুইচ হিসাবে ব্যাখ্যা করা যেতে পারে। আমি এটিকে সংশোধন করতে একটি সম্পাদনা অবদান রাখব।
জ্যাকব সি বলছেন

81

পুনরায় নাম স্ক্রিপ্টটি ব্যবহার করুন :

$ rename 's/^/PRE_/' *

ফাইলের নামগুলিতে মেটাচ্যাক্টর বা শ্বেতস্পেসে কোনও সমস্যা নেই।


3
কিছু সিস্টেমে "রিমনাম" নামে একটি ইউজন-লিনাক্স ইউটিলিটি থাকে যা ভিন্নভাবে কাজ করে (উবুন্টুতে এটি "rename.ul" নামে পরিচিত)।
পরবর্তী বিজ্ঞপ্তি না দেওয়া পর্যন্ত বিরতি দেওয়া হয়েছে।

renameআমাকে সবসময় একাধিক ফাইলের নাম খুব সহজেই পরিচালনা করতে সহায়তা করে।
অ্যালান হাগই আলাভি

61

জন্য উপসর্গ বা প্রত্যয় যোগ করার ফাইল (ডিরেক্টরি) জন্য, আপনার দ্বারা সহজ এবং শক্তিশালী উপায় ব্যবহার করতে পারে xargs :

ls | xargs -I {} mv {} PRE_{}

ls | xargs -I {} mv {} {}_SUF

এটি xargs এর পরামিতি-প্রতিস্থাপন বিকল্পটি ব্যবহার করছে: -আই। এবং আপনি ম্যান পৃষ্ঠা থেকে আরও বিশদ পেতে পারেন।


2
পিএস: আপনি যদি কেবল বর্তমান ডিরেক্টরিটির অংশ ফাইল (ডিরেক্টরিগুলি) এর নাম পরিবর্তন করতে চান তবে ls *.old | xargs -I {} mv {} PRE_{}
এক্সগার্সের

আকর্ষণীয়ভাবে নাম ব্যবহার করে কাজ হয়নি। xargs ব্যবহার করা আমার আরএইচএল সেটআপের জন্য ভাল হয়েছে তাই এই বিকল্পটির জন্য +1 করে, কমান্ডটি বোঝা সহজ করে তোলে
অ্যাসউইন

ফাইলনেমে যদি একক উদ্ধৃতি থাকে তবে কাজ করে না: xargs: মিল নেই একক উদ্ধৃতি; ডিফল্টরূপে উদ্ধৃতিগুলি xargs এর জন্য বিশেষ, যদি না আপনি -0 বিকল্পটি ব্যবহার করেন
Evgeny Veretennikov

36

এটি একটি সাধারণ findকমান্ড চালানো যায়:

find * -maxdepth 0 -exec mv {} PRE_{} \;

উপরের কমান্ডটি বর্তমান ডিরেক্টরিতে সমস্ত ফাইল এবং ফোল্ডারগুলির সাথে উপসর্গ করবে PRE_


8

ইউটি-লিনাক্স ব্যবহার করে বর্তমান ডিরেক্টরিতে সমস্ত ফাইল এবং ফোল্ডারগুলিতে একটি উপসর্গ যোগ করতে rename( prenameদেবিয়ান এবং অন্যান্য কয়েকটি সিস্টেমের পার্ল বৈকল্পিকের বিপরীতে ) আপনি এটি করতে পারেন:

rename '' <prefix> *

এটি খালি স্ট্রিংয়ের প্রথম উপস্থিতিটি খুঁজে বের করে (যা অবিলম্বে পাওয়া যায়) এবং তারপরে আপনার উপসর্গের সাথে সেই উপস্থিতিটি প্রতিস্থাপন করে, তারপরে ফাইলের বাকী নামটির শেষে এটি শেষ করা যায়। সম্পন্ন.

জন্য প্রত্যয় , আপনার প্রয়োজন Perl সংস্করণ ব্যবহার বা ব্যবহারের খোঁজ


util-linuxদেবিয়ান প্রসারিত এটি সরবরাহ করে বলে মনে হচ্ছে /usr/bin/rename.ul
ব্যবহারকারী 1338062

7

আপনার যদি রুবি থাকে (1.9+)

ruby -e 'Dir["*"].each{|x| File.rename(x,"PRE_"+x) }'


2

এখানে আপনি ব্যবহার করতে পারেন একটি সহজ স্ক্রিপ্ট। আমি File::chdirপরিচালনা পরিচালনা cdপরিচালনা করতে অ-মানক মডিউলটি ব্যবহার করতে চাই , সুতরাং এই স্ক্রিপ্টটি যেমন হয় তেমনি আপনাকে এটি ইনস্টল করতে হবে ( sudo cpan File::chdir)।

#!/usr/bin/perl

use strict;
use warnings;

use File::Copy;
use File::chdir; # allows cd-ing by use of $CWD, much easier but needs CPAN module

die "Usage: $0 dir prefix" unless (@ARGV >= 2);
my ($dir, $pre) = @ARGV;

opendir(my $dir_handle, $dir) or die "Cannot open directory $dir";
my @files = readdir($dir_handle);
close($dir_handle);

$CWD = $dir; # cd to the directory, needs File::chdir

foreach my $file (@files) {
  next if ($file =~ /^\.+$/); # avoid folders . and ..
  next if ($0 =~ /$file/); # avoid moving this script if it is in the directory

  move($file, $pre . $file) or warn "Cannot rename file $file: $!";
}

1

আমার সিস্টেমে আমার renameকমান্ড নেই। এখানে একটি সাধারণ একটি লাইনার রয়েছে। এটি সমস্ত এইচটিএমএল ফাইলগুলি পুনরাবৃত্তভাবে আবিষ্কার করে এবং prefix_তাদের নামের সামনে যোগ করে:

for f in $(find . -name '*.html'); do mv "$f" "$(dirname "$f")/prefix_$(basename "$f")"; done

1
সঙ্গে find: আপনি আদেশ, একটি লুপ জন্য কোন প্রয়োজন নির্বাহ করতে পারেন stackoverflow.com/a/33297439/2351568
DJCrashdummy

0

এটি আপনার ফাইলগুলিকে তাদের ডিরেক্টরিতে উপসর্গ করবে।

${f%/*}গত স্ল্যাশ পর্যন্ত পথ /> ডিরেক্টরির -

${f##*/}গত স্ল্যাশ সামনে কিছু ছাড়া লেখা /পথ ছাড়া> ফাইলের নাম -

সুতরাং এটি কিভাবে যায়:

for f in $(find /directory/ -type f); do 
  mv -v $f ${f%/*}/$(date +%Y%m%d)_Prefix_${f##*/}
done
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.