Biasanya, saya membatalkan hal $ mkdir newFolder; $ mv *.zip newFolder; $ cd newFolder; $unzip *.zip
tetapi terkadang saya malas dan hanya melakukan di folder yang sewenang-wenang $ unzip *.zip
sehingga dari waktu ke waktu mengacaukan konten lain. Saya akan mencantumkan di sini beberapa metode - beberapa versi arsip pasti memiliki bendera jelek sementara yang lain lebih sederhana, saya lebih tertarik tentang yang terakhir.
Beberapa cara untuk menghapus pengarsipan, apakah ada yang lain?
$ find . -anewer fileThatExistedBeforeUnarchieving -ok rm '{}' \;
Kelemahannya adalah ia mencantumkan*.zip
dir, jadi Anda perlu menggunakan lambat-ok
, lambat dengan banyak*.zip
kecocokan dan, untuk beberapa alasan, sepertinya tidak cocok dengan semua yang diekstraksi.Jika sejumlah kecil file diekstraksi, satu per satu, lambat, rumit dan rentan kesalahan.
Ketika saya ingin memastikan apakah isi dari arsip tersebut sebenarnya adalah sebuah folder, saya terkadang memeriksanya
$ unzip -l *.bsd
, berfungsi setidaknya dalam versi unzip yang lama.
Jika Anda merujuk ke alat pengarsipan tertentu, harap sebutkan jika perlu. Tetap sederhana - saya lebih tertarik tentang CARA bagaimana Anda melakukannya, daripada alat tunggal.
sumber
mkdir; unzip
hal - hal tersebut sehingga saya tidak pernah terlalu malas untuk melakukannya! svn.mikelward.com/svn/scripts/untarJawaban:
Dengan nama
Anda dapat membuat daftar file dalam arsip dan menghapusnya, meskipun ini mengganggu dengan pengarsipan seperti unzip atau 7z yang tidak memiliki opsi untuk menghasilkan daftar nama file yang sederhana. Bahkan dengan tar, ini mengasumsikan tidak ada baris baru dalam nama file.
Alih-alih menghapus file, Anda bisa memindahkannya ke tujuan yang dituju.
Menggunakan FUSE
Alih-alih bergantung pada alat-alat eksternal, Anda dapat (pada sebagian besar unit) menggunakan FUSE untuk memanipulasi arsip menggunakan perintah sistem file biasa.
Anda dapat menggunakan Fuse-zip untuk mengintip ke dalam zip, ekstrak dengan
cp
, daftar isinyafind
, dll.AVFS membuat tampilan seluruh hierarki direktori Anda di mana semua arsip memiliki direktori terkait (nama yang sama dengan # ditempel di bagian akhir) yang tampaknya menyimpan konten arsip.
Tanggal
Dengan asumsi belum ada lain setiap kegiatan dalam hierarki yang sama dari ekstraksi Anda, Anda dapat memberitahu file diekstrak dengan terbaru mereka kriminal . Jika Anda baru saja membuat atau memindahkan file zip, Anda dapat menggunakannya sebagai cutoff; jika tidak gunakan
ls -lctr
untuk menentukan waktu cutoff yang cocok. Jika Anda ingin memastikan untuk tidak menghapus ritsleting, tidak ada alasan untuk melakukan persetujuan manual:find
sangat mampu mengeluarkannya . Berikut adalah contoh perintah menggunakan zsh ataufind
; perhatikan bahwa primary-cmin
dan-cnewer
tidak di POSIX tetapi ada di Linux (dan sistem lain dengan GNU find), * BSD dan OSX.Dengan GNU find, FreeBSD dan OSX, cara lain untuk menentukan waktu cutoff adalah dengan membuat file dan menggunakannya
touch
untuk mengatur waktu ke waktu cutoff.Alih-alih menghapus file, Anda bisa memindahkannya ke tujuan yang dituju. Inilah cara menemukan GNU / * BSD / OSX, membuat direktori di tujuan sesuai kebutuhan.
Setara dengan Zsh (hampir: yang ini mereproduksi seluruh hierarki direktori, bukan hanya direktori yang akan berisi file):
Peringatan, saya belum menguji sebagian besar perintah dalam jawaban ini. Selalu tinjau daftar file sebelum menghapus (jalankan
echo
dulu, lalurm
jika tidak apa-apa).sumber
Aku merasa bodoh, toh aku menggaruk kepalaku untuk menulis naskah ini ketika aku memiliki masalah yang sama. Saya menggunakan
cpio
dengan-it
bendera untuk mendapatkan daftar file; Anda dapat menggunakan perintah yang setara untuk arsip lainnya. Bagian yang sulit adalah, arsip cpio berasal dari initrd dan saya mengekstraksi/
, sehingga banyak folder dan file memiliki nama yang sama seperti dalam sistem yang berfungsi. Untungnya cpio tidak menimpa file saya yang ada. Saya menggunakan pemeriksaan waktu untuk memastikan tidak menghapus apa pun yang ada sebelum perintah yang salah.sumber
Bagaimana dengan memberi makan daftar file dalam arsip
xargs rm
?Itu akan
tar -tf tarbomb.tar | xargs rm
atauunzip --list zipbomb.zip | xargs rm
.sumber
xargs
mengharapkan inputnya dikutip dengan cara aneh yangfind
tidak menghasilkan. Gunakanxargs -I rm {}
agar xargs memproses satu item per baris sebagai gantinya. Untuk perintah unzip, implementasi apa yang Anda miliki? Milik saya (Debian / Ubuntu) tidak--list
hanya memiliki-l
, dan tidak hanya mencetak nama file, sehingga diperlukan pemrosesan tambahan.find
. 3) Anda benar tentangunzip
, saya tidak menguji dan tampaknya tidak ada pilihan untuk daftar yang tidak didekorasi. Tidak--list
di Ubuntu saya juga - saya hanya tidak menguji.tar -t
untukfind
. Tapi poin saya yang lain bertahan. Ada risiko nyata bahwa perintah Anda yang diberikan akan menghapus file yang tidak terkait.tar -tf tarbomb.tar
akan mencetak nama file satu per baris, sehingga Anda bisa melakukantar -tf tarbomb.tar | while IFS=$'\n' read -r filename; do rm "$filename"; done
atau serupa.Tidak benar-benar apa yang Anda minta tetapi bagaimana menggunakan skrip "unzip semua" alih-alih.
Dengan begitu output dari setiap file masuk ke direktori itu sendiri.
sumber
Saya menggunakan fungsi berikut di zsh:
Yaitu perintah substitusi untuk menghapus semua file dalam output dibersihkan dari
unzip -l
.tar tvf
dapat digunakan dengan cara yang sama.sumber