ファイルを新しい場所にドラッグアンドドロップするBashスクリプト


8

私はこの質問のために私のお尻を手に入れられると確信していますが、私はそれを理解することができないようです。私はbashスクリプトを初めて使用するので、気楽に行ってください...

ファイルをデスクトップアプリケーションにドラッグアンドドロップして、bashスクリプトを呼び出し、bashスクリプト内で指定された場所にそのファイルを移動する必要があります。これまでのところです。

Bashスクリプト

#! /bin/bash

mv $file /path/to/new/directory

しかし、$fileデスクトップアプリケーションにドラッグアンドドロップするときに、変数としてを入力する方法がわかりません。これどうやってするの?

理由:あるフォルダーで読む必要がある論文があり、一度読んだら別のフォルダーに入れます。基本的に、これを簡単に行えるようにしたいだけです。

ありがとう、ポール


2
わかりません。それが必要な場合は、ドラッグアンドドロップしてみませんか?あなたはfolder1にドラッグする方法を尋ねているようです。これにより、ドラッグされたアイテムがfolder 2に移動されます。なぜそれを直接folder2に直接ドラッグしないのですか?
terdon 16

2
ファイルをアプリケーションにドラッグアンドドロップして、そのファイルをアプリケーションに渡して何かを実行できるファイルマネージャーは知りません。私が使用したすべてのファイルマネージャは、フォルダへのファイルのドラッグのみをサポートしています。これが可能だと思う理由はありますか?このように機能するアプリケーションを見たことがありますか?もちろん、これをWebアプリケーション(ブラウザーのドラッグ&ドロップAPIを提供する)または別のより複雑なタイプのアプリケーションで行うこともできますが、AskUbuntuの回答で説明するには複雑すぎる場合があります。
ロビンウィンスロー2016

1
ほとんどの端末とファイルマネージャはこれをしませんか?XFCEでは、Thunarからターミナルにファイルをドラッグすると、完全なファイル名が貼り付けられます。ファイルをLibreOfficeやGeditなどにドラッグすると、ファイルが開きます(少なくとも試みください)。これは、ファイル名を使って何をしたいかはアプリケーション次第であるように思えます。
Xen2050 2016

@terdon。はい、別のフォルダにドラッグアンドドロップしたいだけですが、現在のディレクトリから戻って新しいディレクトリに移動し、そこにファイルをダンプすることなく、これをすばやく行う方法が必要でした。それは私にとっては効率が悪いようです。他のすべての人には、以下のSlug45が提供する回答を参照してください。
PaulFrater

回答:


24
  1. 次の内容でbashスクリプトファイルを作成します。

    #!/bin/bash
    mv "$1" "PATH_TO_NEW_DIRECTORY"
    
  2. 次の内容の.desktopファイルを作成します。

    [Desktop Entry]
    Name=Document Mover
    Exec=PATH_TO_SCRIPT_FILE %U
    Type=Application
    
  3. PATH_TO_NEW_DIRECTORYおよびPATH_TO_SCRIPT_FILEを好みに変更します。

  4. 行う chmod +x script_name

  5. ファイルを.desktopファイルにドラッグします。

  6. やった!


1
図のように、常に変数を引用符で囲む必要があることを強調しておく必要があります。の$file代わりに"$file"(または"${file}")を使用すると、多くの問題が発生する可能性があります。
Paddy Landau

また、bashここで使用する必要はありません。#!/bin/sh同じことを行うのに十分です(bashとにかく多くのシステムでリンクされている可能性があります)。
ckujau

14

スクリプトは必要ありません。必要な場所にPATH_TO_NEW_DIRECTORYへのリンクを作成します。次に、ファイルをリンクにドラッグします


2
これはより簡単な解決策でした(しかし、私はbashスクリプトについて何かを学んだことはなかったでしょう:)
PaulFrater

これは、それを行う「明白な」方法であり、質問に答えます。ただし、スクリプトを使用する場合、そのスクリプトは任意に複雑になり、渡されるファイルに応じてさまざまなことを実行できます(音楽ファイルを1つの場所に配置し、ドキュメントを別の場所に配置するなど)、またはシンボリックリンクを置き換える必要なしに宛先を変更するだけです。
ジョー

3

@ Slug45が言ったことは完全に正しいです。ただし、説明が不足しています。

ファイルを実行可能ファイル(またはファイルへのリンク)にドラッグアンドドロップすると、その実行可能ファイルは、ドラッグされたファイルへのパスを引数として実行されます。これはWindowsでもまったく同じです(ここで本当に重要なことではありません)。

Bashには、引数を処理する簡単な方法があります。すべての引数の配列を取得するに"$@" は、(引用符付きで)使用します(たとえば、for..inループで役立ちます)。$@"$*"、および$*同様のことを行うが、あなたはほとんど常にたいです"$@"。詳細については、こちらをご覧ください。

さらに、$XXは引数番号として、特定の引数に直接アクセスできます。例えば:

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

大きなスクリプトでは、これらを名前付き変数に割り当てることをお勧めします。

$ 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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.