Saya ingin menambahkan awalan pada semua folder dan direktori.
Contoh:
saya sudah
Hi.jpg
1.txt
folder/
this.file_is.here.png
another_folder.ok/
Saya ingin menambahkan awalan "PRE_"
PRE_Hi.jpg
PRE_1.txt
PRE_folder/
PRE_this.file_is.here.png
PRE_another_folder.ok/
Salam,
Jawaban:
Terima kasih kepada Peter van der Heijden , berikut ini salah satu yang akan berfungsi untuk nama file dengan spasi di dalamnya:
for f in * ; do mv -- "$f" "PRE_$f" ; done
("-" diperlukan agar berhasil dengan file yang dimulai dengan tanda hubung, yang namanya akan diartikan sebagai sakelar untuk perintah mv)
sumber
ls
perintah menjadi*
dan memberi tanda kutip ganda di sekitar argumen menjadimv
, ini akan berfungsi untuk file yang berisi spasi.Gunakan dengan rename skrip cara ini:
$ rename 's/^/PRE_/' *
Tidak ada masalah dengan karakter meta atau spasi dalam nama file.
sumber
rename
selalu membantu saya menangani beberapa penggantian nama file dengan sangat mudah.Untuk menambahkan prefiks atau sufiks untuk file (direktori), Anda dapat menggunakan cara yang sederhana dan hebat dengan xargs :
ls | xargs -I {} mv {} PRE_{} ls | xargs -I {} mv {} {}_SUF
Ini menggunakan opsi penggantian parameter dari xargs: -I. Dan Anda bisa mendapatkan lebih banyak detail dari halaman manual.
sumber
ls *.old | xargs -I {} mv {} PRE_{}
Ini dapat dilakukan dengan menjalankan
find
perintah sederhana :find * -maxdepth 0 -exec mv {} PRE_{} \;
Perintah di atas akan mengawali semua file dan folder di direktori saat ini dengan
PRE_
.sumber
Untuk menambahkan awalan ke semua file dan folder di direktori saat ini menggunakan util-linux
rename
(sebagai lawan dariprename
, varian perl dari Debian dan sistem tertentu lainnya), Anda dapat melakukan:rename '' <prefix> *
Ini menemukan kemunculan pertama dari string kosong (yang ditemukan segera) dan kemudian menggantikan kejadian itu dengan awalan Anda, kemudian menempelkan sisa nama file ke akhir itu. Selesai.
Untuk sufiks , Anda perlu menggunakan versi perl atau gunakan find .
sumber
util-linux
di Debian Stretch tampaknya menyediakan ini sebagai/usr/bin/rename.ul
.Jika Anda memiliki Ruby (1.9+)
ruby -e 'Dir["*"].each{|x| File.rename(x,"PRE_"+x) }'
sumber
dengan Perl:
perl -e 'rename $_, "PRE_$_" for <*>'
sumber
Berikut ini skrip sederhana yang dapat Anda gunakan. Saya suka menggunakan modul non-standar
File::chdir
untuk menanganicd
operasi pengelolaan , jadi untuk menggunakan skrip ini apa adanya Anda perlu menginstalnya (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: $!"; }
sumber
Di sistem saya, saya tidak memiliki
rename
perintah. Ini adalah satu baris sederhana. Ia menemukan semua file HTML secara rekursif dan menambahkanprefix_
di depan namanya:for f in $(find . -name '*.html'); do mv "$f" "$(dirname "$f")/prefix_$(basename "$f")"; done
sumber
find
Anda juga dapat menjalankan perintah, tidak perlu loop: stackoverflow.com/a/33297439/2351568Ini akan memberi awalan file Anda di direktorinya.
Ini
${f%/*}
adalah jalur hingga garis miring terakhir/
-> direktoriIni
${f##*/}
adalah teks tanpa apa pun sebelum garis miring terakhir/
-> nama file tanpa jalurJadi begitulah kelanjutannya:
for f in $(find /directory/ -type f); do mv -v $f ${f%/*}/$(date +%Y%m%d)_Prefix_${f##*/} done
sumber