Saya memiliki folder dengan sejumlah file di dalamnya ABC. * (Ada sekitar 100 file seperti itu). Saya ingin menduplikasi semuanya ke file baru dengan nama yang dimulai dengan DEF. *
Jadi aku ingin
ABC.Page1
ABC.Page2
ABC.Topic12
...etc
disalin ke
DEF.Page1
DEF.Page2
DEF.Topic12
...etc
Apa cara paling sederhana untuk melakukan ini dengan perintah batch (dalam BASH atau serupa)? Saya sedang memikirkan sesuatu yang melibatkan sed atau awk atau xargs, tetapi saya mengalami kesulitan mencari tahu sintaksnya. Saya bisa menulis skrip Python, tapi saya pikir mungkin ada solusi baris perintah yang tidak terlalu rumit.
mc
Manajer file yang terhormat memiliki dukungan paling luas untuk jenis penggantian nama massal ini.tar
juga bukan ayam musim semi. Lihat jawaban saya sebagai contoh.Jawaban:
Bagaimana dengan yang seperti ini di bash:
Anda dapat mengujinya dengan meletakkan gema di depan perintah cp:
sumber
cp /usr/local/lib/libboost* /usr/local/lib/libboost*
dengan gema cek.Untuk melakukan ini secara efisien dengan sejumlah besar file, lebih baik untuk menghindari memulai
cp
proses yang berbeda untuk masing-masing file . Salah satu caranya adalah dengan menyalin kemudian mengganti nama mereka menggunakanprename
(rename
disinkronkan dengan ini secara default pada distro berbasis Debian). Menggunakan ini dan Linuxmktemp
:Memperbarui
Sebenarnya
pax
mungkin cara yang lebih baik untuk pergi ke sini:Sayangnya, meskipun
pax
POSIX dan Linux Standard Base, beberapa distro saat ini memasukkannya secara default.sumber
tar
akan melakukan ini untuk Anda sangat cepat.UJI
Pertama saya membuat 2 direktori dan 10 file:
Lalu saya menyalinnya:
MENGUBAH
Jadi GNU
tar
akan menerimased --transform=EXPRESSION
penggantian nama file. Ini bahkan dapat mengganti nama hanya beberapa file. Contohnya:Jadi itu satu keuntungan.
ALIRAN
Juga pertimbangkan bahwa ini hanya dua
tar
proses - dan itu tidak akan berubah terlepas dari jumlah file Anda.tar
dioptimalkan seperti yang Anda inginkan. Ini tidak akan pernah memiliki jumlah argumen masalah atau proses anak kabur. Ini hanya A> B selesai.ARGUMEN
Saya menggunakan 7 argumen berbeda yang digabungkan antara dua
tar
proses saya di sini. Yang paling penting tercantum di sini terlebih dahulu:... dan di sisi lain
|pipe
...sumber
pax
solusi untuk pertanyaan ini. Saya akan menambahkannya ke jawaban saya, tetapi saya pikir ini lebih cocok di sini -pax -rws '/^ABC/DEF/' ABC.* .
pax
ditentukan POSIX - maka dari itupax
.pax
mungkin POSIX, tetapi sayangnya jarang diinstal secara default.Jika Anda tidak keberatan menggunakan alat yang kurang standar, saya sarankan menggunakan mmv (perpindahan massal) yang ditulis untuk tugas yang sangat baik ini. Menggunakan
mcp
(salinan massal), yang merupakan bagian dari suite, Anda bisa melakukannyaTidak mudah menemukan paket unduhan. Paket Debian saat ini (yang juga digunakan Arch dalam AUR) untuk dikompilasi di rumah dapat ditemukan di sini .
sumber
apt-get install mmv
Di zsh, masukkan baris berikut di Anda
.zshrc
:Kemudian, pada baris perintah, Anda dapat menjalankan
atau sederhana
Di shell lain, selama Anda menginstal zsh:
sumber
Anda bisa melakukan ini:
sumber
"${i#*.}"
bit?Anda dapat melakukan ini: http://www.projectik.eu/index.php/programovanie/linux/item/243-linux-kopirovanie-suborov-vo-vlakne Berikut ini adalah contoh
sumber