GNU/Linux >> Belajar Linux >  >> Linux

temukan dan salin semua gambar dalam direktori menggunakan terminal linux mint, mencoba memahami sintaks

Pertama, pahami bahwa pipa "|" menghubungkan perintah menyalurkan output dari yang pertama ke yang kedua sebagai argumen. Kedua kode shell Anda sama-sama menyalurkan output dari perintah find ke perintah lain (grep dan xargs). Mari kita lihat perintah tersebut satu demi satu:

Perintah pertama:temukan

find adalah program untuk "mencari file dalam hierarki direktori" (itulah penjelasan dari halaman manual find). Sintaksnya adalah (dalam hal ini)

find <search directory> <search pattern> <action>

Dalam kedua kasus, direktori pencarian adalah . (itu adalah direktori saat ini). Perhatikan bahwa itu tidak hanya mencari direktori saat ini tetapi juga semua subdirektorinya (hierarki direktori).

Pola pencarian menerima opsi -nama (artinya mencari file yang namanya cocok dengan pola yang diberikan sebagai argumen untuk opsi ini) atau -iname (sama dengan nama tetapi tidak peka huruf besar/kecil) antara lain.

Pola tindakan mungkin -print0 (cetak nama file yang tepat termasuk posisinya di direktori pencarian yang diberikan, yaitu jalur relatif atau absolut ke file) atau -exec (jalankan perintah yang diberikan pada file), perintahnya adalah untuk diakhiri dengan ";" dan setiap instance dari "{}" diganti dengan nama file).

Yaitu, kode shell pertama (bagian pertama, kiri pipa)

find . -iname \*.jpg -print0 

mencari semua file dengan akhiran ".jpg" dalam hierarki direktori saat ini dan mencetak jalur dan namanya. Yang kedua (bagian pertama)

find . -name '*' -exec file {} \; 

temukan semua file dalam hierarki direktori saat ini dan jalankan

file <filename>

pada mereka. File adalah perintah lain yang menentukan dan mencetak jenis file (lihat halaman manual untuk detailnya, file man).

Perintah kedua:xargs

xargs adalah perintah yang "membangun dan menjalankan baris perintah dari input standar" (man xargs), yaitu dari find output yang disalurkan ke xargs. Perintah yang dibuat dan dijalankannya adalah dalam hal ini

cp -v {} /home/joachim/neu2"

Opsi -I{} mendefinisikan string pengganti, yaitu setiap instance {} dalam perintah harus diganti dengan input yang didapatnya dari file (yaitu, nama file). Opsi -0 mendefinisikan bahwa item input tidak diakhiri (dipisahkan) dengan spasi putih atau baris baru tetapi hanya dengan karakter nol. Ini tampaknya diperlukan saat menggunakan dan cara standar untuk menangani keluaran find sebagai masukan xargs.

Perintah yang dibuat dan dijalankan tentu saja adalah perintah salin dengan opsi -v (verbose) dan menyalin setiap nama file yang didapat dari find ke direktori.

Perintah ketiga:grep

grep memfilter masukannya hanya dengan memberikan garis atau string yang cocok dengan pola keluaran tertentu. Opsi -o memberi tahu grep untuk mencetak hanya string yang cocok, bukan seluruh baris (lihat man grep), -P memberi tahu grep untuk menginterpretasikan pola berikut sebagai pola perl regexp. Dalam perl regex, ^ adalah awal baris, .+ adalah string arbitrer, arbitrer ini kemudian harus diikuti oleh titik dua, spasi, sejumlah karakter alfanumerik (dalam perl regex dilambangkan \w+) spasi dan string "gambar". Pada dasarnya perintah grep ini memfilter output file untuk hanya menampilkan nama file yang merupakan file gambar. (Baca tentang perl regex misalnya di sini:http://www.comp.leeds.ac.uk/Perl/matching.html )

Perintah yang sebenarnya Anda inginkan

Sekarang yang ingin Anda lakukan adalah (1) mengambil output dari perintah Shell kedua (yang mencantumkan file gambar), (2) membawanya ke bentuk yang sesuai dan (3) menyalurkannya ke perintah xargs dari perintah Shell pertama baris (yang kemudian membuat dan menjalankan perintah penyalinan yang Anda inginkan). Jadi kali ini kami memiliki perintah shell tiga (sebenarnya empat) tahap dengan dua pipa. Bukan masalah. Kita sudah memiliki tahapan (1) dan (3) (walaupun pada tahap (3) kita perlu mengabaikan opsi -0 karena input tidak lagi menemukan output; kita membutuhkannya untuk memperlakukan baris baru sebagai pemisah item).

Tahap (2) masih hilang. Saya sarankan menggunakan perintah cut untuk ini. cut mengubah string py memisahkannya menjadi bidang yang berbeda (dipisahkan oleh karakter pembatas dalam string asli) yang kemudian dapat diatur ulang. Saya akan memilih ":" sebagai karakter pembatas (ini mengakhiri nama file di keluaran grep, opsi -d':') dan memintanya untuk memberi kami bidang pertama saja (opsi -f1, essentialls:cetak hanya nama file, bukan bagian yang muncul setelah ":"), yaitu tahap (2) akan menjadi

cut -d':' -f1

Dan seluruh perintah yang Anda inginkan akan menjadi:

find . -name '*' -exec file {} \; | grep -o -P '^.+: \w+ image' | cut -d':' -f1 | xargs -I{} cp -v {} /home/joachim/neu2

Perhatikan bahwa Anda dapat menemukan semua halaman manual misalnya di sini:http://www.linuxmanpages.com


Linux
  1. Ganti Nama Semua File dan Nama Direktori menjadi Huruf Kecil di Linux

  2. temukan dan salin file menggunakan Bash

  3. temukan dan hapus file dengan ruang menggunakan perintah find di Linux

  1. Cara Menemukan dan Menyalin Jenis File Tertentu Dari Satu Direktori Ke Direktori Lain Di Linux

  2. Bagaimana cara menghapus direktori dan folder di Linux?

  3. Menemukan direktori di Terminal Linux

  1. Menggunakan perintah Sed,ex &Perl untuk menemukan dan mengganti teks di Linux

  2. Linux Temukan Dan Hapus Semua Symlinks Yang Berkaitan Dengan Direktori?

  3. Menggunakan perintah cp di shell linux, bagaimana cara menyalin seluruh direktori ke direktori lain?