Saya memiliki nama file dat dalam urutan kronologis:
FileName_YYYY_MM_DD_HHMM.dat
Apakah ada perintah untuk menambahkan 30 menit ke setiap cap waktu?
command-line
filename
timestamp
strawberrie
sumber
sumber
ls --full-time
?Jawaban:
Menggunakan
python
:os.chdir('/path/to/dir')
akan mengubah direktori saat ini ke direktori yang berisi.dat
file. Ganti/path/to/dir
dengan jalur yang sebenarnya.glob.glob('*.dat')
akan menemukan file yang berakhiran.dat
ini_time
variabel pada awalnya akan memotong tanggal-waktu dari nama file asli menggunakanre
modul dan kemudian memilah entri yang mewakili apa yang ada di string yang diambil sehingga kita dapat menambahkan waktu yang diperlukan untuk inifin_time
akan berisi waktu yang dihasilkan yaituini_time
ditambah 30 menitos.rename
akan mengganti nama file sesuai.Juga perhatikan bahwa, dengan nama file berurutan (berbeda 30 menit) file yang diganti nama akan menimpa yang berikutnya, maka lebih baik menambahkan detik ke nama file yang diubah namanya agar tetap aman. Kalau tidak, Anda perlu menyimpan file yang diubah namanya ke direktori yang berbeda dan kemudian menggantinya dengan yang asli nanti.
sumber
Filename_
dalam metode rename./path/to/file
dengan path lengkap ke direktori?Dengan menggunakan
bash
, file yang diganti nama berada di sub folder barurenamed
.Mulai skrip di folder tempat file berada.
contoh output:
sumber
renamed
FileName_123.Data_YYYY_MM_DD_HHMM.dat
bagiannya.Data_YYYY_MM_DD_HHMM.dat
adalah ekstensi. Dan karenanyaFileName_123
bukan cap waktu yang valid.NASKAH
Ini adalah versi naskah asli saya yang diedit. OP awalnya tidak memberikan informasi lengkap tentang format penamaan. Skrip ini menyesuaikan dengan apa yang disebutkan OP dalam komentar adalah penamaan file yang benar.
* Catatan teknis: *
Dalam skrip ini kami memisahkan nama file menjadi 6 bidang terpisah menggunakan awk, dengan garis bawah sebagai pembatas bidang. Dua bidang pertama, $ 1 dan $ 2 dianggap string teks statis. Kolom 3,4,5, dan 6 adalah stempel waktu saat sampel OP diambil, bukan tanggal pembuatan file pada sistem file.
Variabel COPYDIR menyimpan nama direktori baru tempat file dengan timestamp yang diperbarui akan muncul. Kami membuat direktori itu di direktori kerja saat ini dengan
mkdir $COPYDIR
Variabel TEXTSTRING dan DATESTRING memegang teks statis dan cap waktu dengan hormat. Dalam contoh output di bawah ini saya telah menggunakan dua string yang berbeda untuk membuktikan bahwa skrip akan berfungsi terlepas dari teks apa yang dipegang oleh dua bidang pertama.
NEWEPOCHTIME adalah variabel yang menyimpan timestamp baru yang dihitung dalam format unix epoch. NEWDATE adalah variabel yang menyimpan timestamp yang dikonversi dari zaman unix ke format YYYY-MM-DD HH: MM. NEWAPPEND adalah cap waktu aktual yang akan ditambahkan ke file dalam format YYYY_MM_DD_HHMM yang diinginkan OP.
cp $file "$COPYDIR"/"%TEXTSTRING""$NEWAPPEND".dat
menyalin file lama ke direktori "convert_files" (alih-alih bergerak, untuk mencegah kehilangan data) dengan datastamp yang diperbarui.Perhatikan , skrip akan berfungsi selama format penamaan benar - benar diikuti, yaitu semua file benar - benar memiliki
SomeText_123.Data_YYYY_MM_DD_HHMM.dat
format.TULISAN AKSI
Demonstrasi di bawah ini adalah salinan langsung dari terminal saya. Perhatikan bahwa saya telah membuat file asli dengan dua string berbeda di dua bidang pertama. Jadi skrip ini harus bekerja tidak peduli apa yang ada di awal nama file, selama hanya ada dua string yang dipisahkan oleh garis bawah
Naskah itu dinamai
notes-conversion
karena saya mengembangkan naskah dari catatan yang saya ambil saat mengerjakan pertanyaan ini.Perhatikan bahwa nama file yang memiliki bagian HHMM sebagai 2345 (yaitu 15 menit sebelum tengah malam) diperbarui ke 0015, dan bagian DD diperbarui ke hari berikutnya. Format 24 jam dipertahankan.
Selain itu, karena untuk loop hanya mencari
.dat
file, kami menghindari mengganti nama file atau direktori lain yang mungkin ada di direktori kerja, sehingga menghindari kemungkinan hilangnya data. Dalam contoh di bawah, direktori asli menampung 11 item, 3 di antaranya adalah*.txt
file untuk pengujian, jadi kami hanya bekerja dengan 8.dat
file. Di direktori tempat file yang diperbarui, kami melihat 8 file, semua.dat
dan tidak ada file lainnya. Data aman, skrip melakukan tugasnya.PENJELASAN (dari pos asli)
*) Hari ini saya telah belajar bahwa sistem Unix-Linux menghitung waktu dalam waktu Epoch , atau hanya meletakkan detik.
*) skrip mengambil setiap nama file, mengekstrak tanggal, mengubahnya menjadi zaman, menambahkan 1800 detik (tepatnya 30 menit), dan menyimpan file dengan timestamp baru.
*) Skrip ini membahas apa yang diinginkan OP - ubah stempel waktu dalam nama file, bukan perbarui waktu pembuatan file itu sendiri
Alat yang digunakan:
ubuntu 15.04
GNU bash 4.3.30
GNU awk 4.1.1
date (GNU coreutils) 8.23
sumber
find
perintah, yang juga bagus.Anda dapat menggunakan kode ini untuk melakukan apa yang Anda anggap perlu
kodenya adalah:
Cara kerjanya: Kode akan memeriksa menit bagian dalam nama file
MM
maka jika kurang dari 30 akan menambah 30MM
jika sama dengan 30 atau lebih itu akan menambah 1 jam keHH
bagian dalam nama dan mengurangi 30 menit dariMM
bagian dari namasumber