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