Bagaimana saya menyalin (gaya arsip di mana tanggal tidak berubah) semua file dalam direktori cadangan ke direktori pengguna saat mengganti nama setiap file untuk menghapus bagian string acak dari nama (yaitu, -2b0fd460_1426b77b1ee_-7b8e)?
cp dari:
/backup/path/data/Erp.2014.02.16_16.57.03-2b0fd460_1426b77b1ee_-7b8e.etf
untuk:
/home/user/data/Erp.2014.02.16_16.57.03.etf
Setiap file akan selalu dimulai dengan "Erp." diikuti oleh string cap tanggal-waktu diikuti oleh string acak dan kemudian ekstensi ".etf". Saya ingin menyimpan semua elemen nama termasuk cap tanggal-waktu. Saya hanya ingin menghapus string acak.
String acak memungkinkan beberapa cadangan dari file yang sama. Namun, dalam hal ini, saya hanya menjalankan fdupes dan tidak ada duplikat. Jadi saya bisa mengembalikan semua file, menghapus string acak.
Saya mencari perintah bash satu baris untuk melakukannya.
Jika itu tidak berhasil, saya bisa melakukannya dalam dua langkah atau lebih. Saya biasanya menggunakan KRename, tetapi dalam hal ini saya harus melakukannya di bash. (Saya bekerja dari jarak jauh.)
pax
. Ini terlihat seperti alat yang sangat berguna. Membuat saya bertanya-tanya mengapa ini bukan standar di lebih banyak distro ...pax
telah ada di Linux Standard Base sejak 2005. Ditambah alternatifnya, GNUcpio
, mungkin merupakan alat GNU yang paling tidak memiliki fitur.rename
berbeda pada Fedora / Red Hat: Saya tidak tahu bagaimana menggunakannya dalam kasus ini.Anda dapat menggunakan
cp
perintah dengan-a
opsiDan kemudian gunakan for for untuk mengganti nama semua file saat menyalinnya:
Siap. Mulai perintah ini di direktori sumber.
Penjelasan: Ini
%%-*
akan memotong semua karakter setelah kemunculan pertama tanda hubung / minus-
dan.etf
pada akhirnya menambahkan lagi ekstensi file.Nah, dan sebagai satu liner, letakkan semuanya dalam satu baris. :-) Seperti ini
sumber
%%-*
tipnya? Saya penasaran.Di zsh, gunakan
zmv
. Letakkan ini di.zshrc
:Kemudian gunakan
Dalam bash:
Jika Anda tidak memiliki zsh, cara POSIX menggunakan pax (ini menyalin direktori secara rekursif).
Jika Anda menggunakan sistem terbatas tanpa zsh dan tidak ada pax, Anda dapat menggunakan loop:
sumber
cp
tidak memiliki kemampuan itu. Saya ingatcpio
bisa melakukan itu, tetapi halaman manual saat ini mengatakan sebaliknya. Namun, (gnu)tar
memang memiliki--transform
opsi:Jadi, Anda akan memiliki cmdline seperti:
sumber