GNU/Linux >> Belajar Linux >  >> Linux

Ny Cara Menggunakan Xargs Di Pipa?

Saya mencoba mengonversi file flac yang dipindahkan ke folder ke mp3 di folder lain secara otomatis.

Baris kode saya saat ini adalah ini:

inotifywait -m -r -q -e moved_to --format "'%w%f'" ~/test |  xargs -I x flac -cd x - | lame -b 320 - //eadn-wc01-5196795.nxedge.io/media/1tb/x.mp3

Untuk menjelaskan cara kerjanya sejauh ini, inotifywait memonitor ~/test secara rekursif untuk file yang dipindahkan ke sana, mengeluarkan jalur dan nama file ke pipa. xargs mengambil nama itu dan membuat perintah flac yang tepat, mengganti x dengan nama file dan mendekode file ke pipa lain. Di pipa baru lumpuh memproses output flac menjadi mp3 di bawah /media. Saya ingin xargs menjangkau pipa dengan cara tertentu, mengganti x dalam perintah lumpuh atau dengan cara tertentu mengirimkannya ke variabel yang dapat diakses oleh kedua perintah atau sesuatu. Saya mencoba bermain-main dengan pipa bernama dan jazz itu, tetapi fakta bahwa ada data aktual yang disalurkan di antara dua perintah itu membuat saya bingung.

Jawaban yang Diterima:

Jika saya mengerti dengan benar, Anda ingin menjalankan satu instance flac … | lame … untuk setiap baris input, dan interpolasi input ke dalam argumen untuk kedua perintah.

Karena Anda membutuhkan xargs untuk memulai pipeline, Anda harus membuatnya memulai program yang mampu membuat pipeline, yaitu shell.

inotifywait -m -r -q -e moved_to --format "%w%f" ~/test |
xargs -l sh -c 'flac -cd "$0" - | lame -b 320 - "//eadn-wc01-5196795.nxedge.io/media/1tb/$0.mp3"'

Atau, minta shell pemanggil membaca baris satu per satu dan menjalankan pipeline.

inotifywait -m -r -q -e moved_to --format "%w%f" ~/test |
while IFS= read -r file; do
  flac -cd "$file" - | lame -b 320 - "//eadn-wc01-5196795.nxedge.io/media/1tb/$file.mp3"
done

Perhatikan bahwa format %w%f menghasilkan jalur absolut, yang Anda awali dengan /media/1tb dan menambahkan .mp3 . Jika Anda ingin menghapus bagian direktori dari file di lame perintah, ubah $file ke ${file##*/} . Jika Anda ingin menghapus ekstensi, ubah $file ke ${file%.*} . Jika Anda ingin melakukan keduanya, Anda harus melakukannya dalam dua langkah. Jika Anda ingin mereproduksi hierarki direktori di bawah /media/1tb , Anda dapat menggunakan mkdir -p .

cd ~/test
inotifywait -m -r -q -e moved_to --format "%w%f" . |
while IFS= read -r file; do
  [ -f "$file" ] || continue; # skip directories and other special files
  dir=${file%/*}; file=${file##*/}
  mkdir -p "/media/1tb/$dir"
  flac -cd "$dir/$file" - | lame -b 320 - "//eadn-wc01-5196795.nxedge.io/media/1tb/$dir/${file#.*}.mp3"
done

Linux
  1. Ny Cara Menggunakan Windows Live Messenger Di Ubuntu?

  2. Bagaimana saya bisa menggunakan perintah alias dengan xargs?

  3. Bagaimana cara menyalurkan output dari grep ke cp?

  1. Bagaimana Cara Menggunakan Halaman Man Untuk Mempelajari Cara Menggunakan Perintah?

  2. Bisakah saya menggunakan output pipa sebagai argumen skrip shell?

  3. Cara yang tepat untuk menggunakan OnFailure di systemd

  1. Cara Menggunakan Pipes dan Named Pipes di Linux (dengan Contoh)

  2. Cara Mencari Halaman Manual Untuk Skenario Penggunaan Biasa?

  3. Cara Terbaik Untuk Mengelola Pengguna di Beberapa Server?