RnR هي أداة سطر أوامر لإعادة تسمية ملفات وأدلة متعددة بشكل آمن والتي تدعم التعبيرات العادية.
يمكنك تنزيل الثنائيات من صفحة الإصدار الأحدث، واختيار الملف المضغوط المتوافق مع نظامك الأساسي. تحتوي هذه الملفات المضغوطة على المحتوى القابل للتنفيذ ومحتويات إضافية أخرى مثل ملفات الإكمال ( Bash و Zsh و fish و PowerShell ).
تتوفر حزمة في AUR ( rnr
) لتثبيت أحدث إصدار من RnR على Arch Linux.
يمكنك استخدام مدير حزم Homebrew لتثبيت هذه الأداة على أنظمة macOS أو Linux.
brew install rnr
RnR مكتوب بلغة الصدأ. يمكنك بنائه من المصدر باستخدام Cargo.
git clone https://github.com/ismaelgv/rnr .
cargo install
cargo install rnr
USAGE:
rnr [FLAGS] [OPTIONS] <EXPRESSION> <REPLACEMENT> <PATH(S)>...
rnr [FLAGS] [OPTIONS] <SUBCOMMAND>
FLAGS:
-b, --backup Generate file backups before renaming
-n, --dry-run Only show what would be done (default mode)
--dump Force dumping operations into a file even in dry-run mode
-f, --force Make actual changes to files
-h, --help Prints help information
-x, --hidden Include hidden files and directories
-D, --include-dirs Rename matching directories
--no-dump Do not dump operations into a file
-r, --recursive Recursive mode
-s, --silent Do not print any information
-V, --version Prints version information
OPTIONS:
--color <color> Set color output mode [default: auto] [possible values: always, auto, never]
-d, --max-depth <LEVEL> Set max depth in recursive mode
-l, --replace-limit <LIMIT> Limit of replacements, all matches if set to 0 [default: 1]
ARGS:
<EXPRESSION> Expression to match (can be a regex)
<REPLACEMENT> Expression replacement
<PATH(S)>... Target paths
SUBCOMMANDS:
from-file Read operations from a dump file
help Prints this message or the help of the given subcommand(s)
to-ascii Replace all file name chars with ASCII chars. This operation is extremely lossy.
regex
. يمكنك التحقق من بناء جملة regex هنا. وهو يدعم مجموعات الالتقاط المرقمة والمسماة.from-file
. ملاحظة WINDOWS: في الأمثلة التي تستخدم *
، تحتاج إلى توسيع حرف البدل في PowerShell، على سبيل المثال: rnr ab (Get-Item ./*)
. هذا غير مدعوم في cmd.exe
.
يمكنك تمرير قائمة الملفات المراد إعادة تسميتها كوسيطات:
rnr -f file renamed ./file-01.txt ./one/file-02.txt ./one/file-03.txt
الشجرة الأصلية
.
├── file-01.txt
├── file-02.txt
├── file-03.txt
└── one
├── file-01.txt
├── file-02.txt
└── file-03.txt
شجرة أعيدت تسميتها
.
├── renamed-01.txt
├── file-02.txt
├── file-03.txt
└── one
├── file-01.txt
├── renamed-02.txt
└── renamed-03.txt
يتم تجاهل الدلائل افتراضيًا ولكن يمكنك أيضًا تضمينها لإعادة تسميتها باستخدام الخيار -D
.
rnr -f -D foo bar ./ *
الشجرة الأصلية
.
├── foo
│ └── foo.txt
└── foo.txt
شجرة أعيدت تسميتها
.
├── bar
│ └── foo.txt
└── bar.txt
يتم تعيين حد الاستبدال على 1 بشكل افتراضي، ولكن يمكنك تكوين هذا الحد لاستبدال العديد من التطابقات غير المتداخلة. سيتم استبدال جميع التطابقات إذا تم تعيين هذا الخيار على 0.
rnr -f -l 0 o u ./ *
الشجرة الأصلية
.
├── foo.txt
├── foofoo.txt
├── foofoofoo.txt
└── foofoofoofoo.txt
شجرة أعيدت تسميتها
.
├── fuu.txt
├── fuufuu.txt
├── fuufuufuu.txt
└── fuufuufuufuu.txt
يمكنك دمج rnr
مع أدوات UNIX الأخرى باستخدام الأنابيب لتمرير الوسائط.
find . -type f +mtime 1 | xargs rnr -f file renamed
cat file_list.txt | xargs rnr -f file rename
محتوى file_list.txt
:
file-01.txt
one/file-02.txt
one/file-03.txt
إذا تم تمرير الخيار العودي ( -r
)، فسيقوم rnr
بالبحث عن جميع الملفات في المسار بشكل متكرر دون حد للعمق.
rnr -f -r file renamed ./
الشجرة الأصلية
.
├── file-01.txt
├── file-02.txt
├── file-03.txt
└── one
├── file-01.txt
├── file-02.txt
├── file-03.txt
└── two
├── file-01.txt
├── file-02.txt
├── file-03.txt
└── three
├── file-01.txt
├── file-02.txt
└── file-03.txt
شجرة أعيدت تسميتها
.
├── renamed-01.txt
├── renamed-02.txt
├── renamed-03.txt
└── one
├── renamed-01.txt
├── renamed-02.txt
├── renamed-03.txt
└── two
├── renamed-01.txt
├── renamed-02.txt
├── renamed-03.txt
└── three
├── renamed-01.txt
├── renamed-02.txt
└── renamed-03.txt
وبالمثل، يمكنك تعيين الحد الأقصى لعمق الدليل بالاشتراك مع العمليات العودية.
rnr -f -r -d 2 file renamed ./
الشجرة الأصلية
.
├── file-01.txt
├── file-02.txt
├── file-03.txt
└── one
├── file-01.txt
├── file-02.txt
├── file-03.txt
└── two
├── file-01.txt
├── file-02.txt
├── file-03.txt
└── three
├── file-01.txt
├── file-02.txt
└── file-03.txt
شجرة أعيدت تسميتها
.
├── renamed-01.txt
├── renamed-02.txt
├── renamed-03.txt
└── one
├── renamed-01.txt
├── renamed-02.txt
├── renamed-03.txt
└── two
├── file-01.txt
├── file-02.txt
├── file-03.txt
└── three
├── file-01.txt
├── file-02.txt
└── file-03.txt
يتجاهل rnr
الملفات المخفية افتراضيًا لتسريع العمليات وتجنب المشكلات مع بعض الأدلة المحددة مثل .git/
أو .local/
. يمكنك تضمين خيار تمرير الملفات المخفية -x
. يمكنك أيضًا استخدام خيار تضمين الدلائل -D
مع -r
أيضًا.
rnr -f -r -D -x foo bar ./
الشجرة الأصلية
.
├── .foo_hidden_file.txt
├── foo.txt
├── foo
│ ├── foo.txt
│ └── foo
│ └── foo.txt
└── .foo_hidden_dir
└── foo.txt
شجرة أعيدت تسميتها
.
├── .bar_hidden_file.txt
├── bar.txt
├── bar
│ ├── bar.txt
│ └── bar
│ └── bar.txt
└── .bar_hidden_dir
└── bar.txt
عند إجراء عملية إعادة تسمية، سيقوم rnr
بإنشاء ملف تفريغ افتراضيًا في الدليل الحالي الذي قمت بتنفيذ الأمر فيه. يمكن استخدام هذا الملف لإرجاع العمليات بسهولة باستخدام خيار from-file
و- -u
.
إعادة تسمية العملية
rnr -f foo bar ./ *
التراجع عن العملية السابقة
rnr from-file -f -u rnr-[timestamp].json
إذا كنت تريد إعادة العملية، فما عليك سوى تمرير ملف التفريغ دون أي وسيطة إضافية:
rnr from-file -f rnr-[timestamp].json
يمكن لـ rnr
إنشاء ملفات احتياطية قبل إعادة التسمية لأي عملية بتمرير خيار -b
. يتم التأكد من أن أسماء ملفات النسخ الاحتياطي فريدة ولن يتم استبدالها في حالة إنشاء نسخة احتياطية أخرى. إذا كنت تعمل مع العديد من الملفات الكبيرة، فضع في الاعتبار أنه سيتم تكرار الملفات.
rnr -f -b file renamed ./ *
الشجرة الأصلية
.
├── file-01.txt
├── file-02.txt
└── file-03.txt
شجرة أعيدت تسميتها
.
├── file-01.txt.bk
├── file-02.txt.bk
├── file-03.txt.bk
├── renamed-01.txt
├── renamed-02.txt
└── renamed-03.txt
يمكن لـ rnr
تحويل أسماء ملفات UTF-8 إلى تمثيل ASCII الخاص بها. تستخدم هذه الميزة مكتبة AnyAscii لإجراء الترجمة الصوتية.
يمكنك تشغيل:
rnr to-ascii ./ *
أو:
rnr to-ascii -r .
الشجرة الأصلية
.
├── fïlé-01.txt
├── FïĹÊ-02.txt
└── file-03.txt
شجرة أعيدت تسميتها
.
├── file-01.txt
├── FILE-02.txt
└── file-03.txt
مزيد من المعلومات حول التعبير العادي المستخدم في حزمة regex
.
rnr -f '..*$' '.txt' ./*
الشجرة الأصلية
.
├── file-01.ext1
├── file-02.ext2
└── file-03.ext3
شجرة أعيدت تسميتها
.
├── file-01.txt
├── file-02.txt
└── file-03.txt
rnr -f 'd' '1' ./*
الشجرة الأصلية
.
├── file-01.txt
├── file-02.txt
└── file-03.txt
شجرة أعيدت تسميتها
.
├── file-11.txt
├── file-12.txt
└── file-13.txt
name(1)-number(2).extension(3)
].rnr -f ' (w+)-(d+).(w+) ' ' ${2}-${1}.${3} ' ./ *
الشجرة الأصلية
.
├── file-01.txt
├── file-02.txt
└── file-03.txt
شجرة أعيدت تسميتها
.
├── 01-file.txt
├── 02-file.txt
└── 03-file.txt
ملاحظة SHELL: في الأصداف مثل Bash وzsh، تأكد من تغليف نمط REPLACEMENT
بين علامات اقتباس مفردة. وبخلاف ذلك، سيتم استبدال مؤشرات مجموعة الالتقاط بمتغيرات الصدفة الموسعة.
number
.ext
.rnr -f ' (?P<number>d{2}).(?P<ext>w{3}) ' ' ${ext}.${number} ' ./ *
الشجرة الأصلية
.
├── file-01.txt
├── file-02.txt
└── file-03.txt
شجرة أعيدت تسميتها
.
├── file-txt.01
├── file-txt.02
└── file-txt.03