Bash Script untuk Seret dan Jatuhkan File ke Lokasi Baru

8

Saya yakin saya akan mendapatkan pantat saya diserahkan kepada saya untuk pertanyaan ini, tetapi saya sepertinya tidak bisa memahaminya. Saya baru mengenal bash scripting, jadi mudahkan saya ...

Saya ingin dapat menyeret dan melepaskan file ke aplikasi desktop, yang kemudian memanggil skrip bash yang akan memindahkan file itu ke lokasi yang ditentukan dalam skrip bash. Inilah yang telah sejauh ini.

Skrip bash

#! /bin/bash

mv $file /path/to/new/directory

Namun, saya tidak tahu bagaimana cara memasukkan $filesebagai variabel ketika saya seret dan jatuhkan ke aplikasi desktop. Bagaimana saya bisa melakukan ini?

Alasan: Saya memiliki kertas yang perlu saya baca dalam satu folder, dan begitu saya membacanya, saya meletakkannya di folder lain. Saya pada dasarnya hanya ingin membuatnya mudah untuk melakukan ini.

Terima kasih, Paul

PaulFrater
sumber
2
Saya tidak mengerti, kenapa tidak Anda seret dan jatuhkan saja kalau itu yang Anda inginkan? Anda tampaknya bertanya bagaimana cara menyeret ke folder1 yang akan menyebabkan item yang diseret dipindahkan ke folder 2. Mengapa Anda tidak langsung menyeretnya ke folder2?
terdon
2
Saya tidak tahu ada manajer file yang memungkinkan Anda untuk menarik dan melepas file ke aplikasi, dan kemudian meneruskan file itu ke aplikasi untuk melakukan sesuatu. Setiap manajer file yang saya gunakan hanya mendukung menyeret file ke folder. Apakah Anda punya alasan untuk berpikir ini mungkin? Pernahkah Anda melihat aplikasi yang berfungsi seperti ini? Anda tentu saja dapat melakukan ini dengan aplikasi web (yang kemudian menyediakan API drag & drop browser), atau jenis aplikasi lain yang lebih kompleks, tetapi itu mungkin terlalu rumit untuk dijelaskan dalam jawaban AskUbuntu.
Robin Winslow
1
Bukankah sebagian besar terminal dan pengelola file melakukan ini? Di XFCE, menyeret file dari Thunar ke terminal menempelkan nama file lengkap. Dan menyeret file ke sesuatu seperti LibreOffice atau Gedit akan membukanya (setidaknya coba ). Ini terdengar seperti sepenuhnya tergantung pada aplikasi untuk melakukan apa pun yang diinginkan dengan nama file.
Xen2050
@terdon. Ya, saya hanya ingin menarik dan melepas ke folder lain, tetapi saya ingin cara cepat untuk melakukan ini tanpa harus mundur dari direktori yang saya masuki dan memindahkan semua jalan ke direktori baru dan kemudian membuang file di sana. Sepertinya itu tidak efisien bagi saya. Untuk yang lainnya, lihat jawaban yang disediakan oleh Slug45 di bawah ini.
PaulFrater

Jawaban:

24
  1. Buat bash scriptfile dengan konten berikut:

    #!/bin/bash
    mv "$1" "PATH_TO_NEW_DIRECTORY"
  2. Buat file .desktop dengan konten berikut:

    [Desktop Entry]
    Name=Document Mover
    Exec=PATH_TO_SCRIPT_FILE %U
    Type=Application
  3. Ubah PATH_TO_NEW_DIRECTORY dan PATH_TO_SCRIPT_FILE sesuai keinginan Anda.

  4. Melakukan chmod +x script_name

  5. Seret file ke file .desktop.

  6. Selesai !.

Siput45
sumber
1
Harus ditekankan bahwa Anda selalu perlu mengutip variabel, seperti yang ditunjukkan. Menggunakan $filealih-alih "$file"(atau "${file}") bisa membuat Anda menghadapi banyak masalah.
Paddy Landau
Juga, tidak perlu digunakan di bashsini; #!/bin/shsudah cukup untuk melakukan hal yang sama (walaupun mungkin terkait dengan bashbanyak sistem).
ckujau
14

Tidak perlu skrip. Buat tautan ke PATH_TO_NEW_DIRECTORY di mana Anda membutuhkannya. Lalu seret file ke tautan

Jean-Marie
sumber
2
Ini akan menjadi solusi yang lebih mudah (tapi kemudian saya tidak akan belajar sesuatu tentang bash scripting :)
PaulFrater
Ini adalah cara "jelas" untuk melakukannya dan menjawab pertanyaan. Tetapi, jika Anda menggunakan skrip, skrip itu bisa rumit dan melakukan hal-hal yang berbeda tergantung pada file apa yang dilewatkan - seperti meletakkan file musik satu tempat dan dokumen di tempat lain - atau hanya mengubah tujuan tanpa harus mengganti symlink.
Joe
3

Apa yang dikatakan @ Slug45 sepenuhnya benar. Namun, tidak memiliki penjelasan.

Saat Anda menyeret dan menjatuhkan file ke file yang dapat dieksekusi (atau tautan ke yang), file yang dapat dieksekusi tersebut dijalankan dengan jalur ke file yang diseret sebagai argumen. Ini persis sama pada Windows (bukan itu benar-benar penting di sini).

Bash memiliki cara sederhana untuk berurusan dengan argumen. Gunakan "$@" (dengan tanda kutip) untuk mendapatkan array dari semua argumen (berguna misalnya dalam loop for..in). $@,, "$*"dan $*lakukan hal serupa, tetapi Anda hampir selalu menginginkannya "$@". Lihat di sini untuk informasi lebih lanjut tentang spesifik.

Selain itu, Anda dapat langsung mengakses arg tertentu karena $XX adalah nomor arg. Sebagai contoh:

$ cat ./args.sh
echo $1
echo $2
echo $3
$ ./args.sh foo bar baz
foo
bar
baz
$

Dalam skrip besar, lebih baik untuk menetapkan mereka ke variabel bernama:

$ cat music.sh
#!/bin/bash
# Usage: ./music.sh Artist Album Song
ARTIST=$1
ALBUM=$2
SONG=$3

if [ $ARTIST -eq "Nickelback" ]; then exit; fi

mplayer ~/Music/$ARTIST/$ALBUM/$SONG.mp3
Duncan X Simpson
sumber