Linuxでコピー/移動/削除するファイルをキューに入れるプログラム?


10

Teracopy(Windows)などのLinuxの答えをネットで検索しましたが、適切なものが見つかりませんでした。

私が得た最も近いものは:

誰かが私にコピー/移動/削除のためにファイルをキューに入れることができる簡単なファイルコピーツールを勧めることができますか?できれば、ノーチラスからドラッグアンドドロップできるかどうか。

このようなものが存在しない場合、誰かが理由を教えてもらえますか?...このようなものが必要なのは私だけですか?


2
あなたが望むものを正確に説明できれば、それは役に立ちます。ほとんどのLinuxユーザーは「Teracopy」に慣れていないと思います。
ペルチェ

1
これは、大きなコピーと削除に時間がかかり、実行中はGUIインターフェースが利用できない/あまり役に立たないためですか?
dmckee ---元モデレーターの子猫

この要求の部分的な説明はここで見つけることができます:superuser.com/questions/9284/...
dmckee ---元司会者の子猫

LinuxでMiniCopierを利用できませんか?これはJavaアプリです。
ライアンC.トンプソン

1
@Tobu Terracopyは、複数のコピージョブをキューに入れて一時停止できます
Kokizzu

回答:


3

この問題を解決するために、「cpw」と呼ぶこの簡単なスクリプトを書いたところです。

cpを使用するのと同じように使用します...唯一の違いは、開始時にすでに実行されているcpwプロセスの配列を構築し、コマンドがcpに渡される前に終了するまで待機することです。このように、それは自己組織化キューのように動作します。

バックグラウンドのcpwジョブを追加し続けることはできますが、それらが互いに影響し合うことはありません。それらは一度に1つずつ実行されます。

他の人が改善を提案できると私は確信しています。

#!/bin/bash

cpwpids=(`ps -ef | grep $USER | grep 'cpw' | grep -v grep | grep -v $$ | awk '{ print $2 }'`) #build an array of all cpw procs for this user that aren't this one.

cpwcnt=${#cpwpids[@]} # number of elemenets in the above array
cnt=$cpwcnt # counter to be decremented each pass
while [ $cnt -gt 0 ]
do
    cnt=$cpwcnt
    for i in "${cpwpids[@]}" # check if each pid has died yet
    do
        ps --pid $i >/dev/null
        if [ $? -gt 0 ]
        then
            let "cnt -= 1"
        fi
    done
    sleep 2
done
cp -v "$@" >> /tmp/cpw.log #log

使用例:

$ cpw -R /src/tree /dest/tree &

ただの警告ですが、このスクリプトを試しましたが、これ以上調査しなかったため、他のスクリプトが完了するのを無期限に待ち続ける可能性があります。bashで排他性を実現するためのより信頼できる方法は、flock -eを使用することです。ここでは例を参照してください:stackoverflow.com/questions/17996577/...
px1mp

1

私の経験では、Linuxでいくつかのコピーを同時に実行しても、全体的なスループットは実際には低下しません。スループットの測定は、rsyncの-P引数に基づいています。私の特定のケースは、USBハードドライブから同時に大きなファイルでいっぱいの多数のフォルダを個別にコピーすることです。

したがって、一度に多くのものをコピーするのでない限り、問題はありません。


申し訳ありませんが、これはコメントのようなものです。本当に答えではなく、たくさんの意見。
Mrchief

1

Josh Arenbergによって提供されたスクリプトにはいくつかのデッドロックの問題があるかもしれないので(これまで私は経験していませんが、調査もしていません)、自分で何かを書きました。デッドロックの問題はないはずです。また、cpだけでなく、すべてのシェルコマンドで機能します。

Contents of ~/bin/q

#!/bin/bash

#this waits for any PIDs to finish
anywait(){

    for pid in "$@"; do
        while kill -0 "$pid" 2&>1 >/dev/null; do
            sleep 0.5
        done
    done
}


PIDFILE=~/.q.pid

#open PIDFILE and aquire lock
exec 9>>$PIDFILE
flock -w2 9 || { echo "ERROR: flock() failed." >&2; exit 1; }

#read previous instances PID from PIDFILE and write own PID to PIDFILE
OLDPID=$(<$PIDFILE)
echo $$>$PIDFILE

#release lock
flock -u 9

#wait for OLDPID
anywait $OLDPID

#do stuff
"$@"


#afterwards: cleanup (if pidfile still contains own PID, truncate it)
flock -w2 9 || { echo "ERROR: flock() failed." >&2; exit 1; }
if [ $(<$PIDFILE) == $$ ]; then
truncate -s0 $PIDFILE
fi
flock -u 9

プロセスのチェーンを作成し、それぞれが前のプロセスを待機します。チェーンの途中にあるプロセスが待機中にクラッシュした場合(可能性は低いですが不可能ではありません)、チェーンは切断され、両方の部分が並行して実行されます。プロセスの1つが強制終了された場合も同様です。

このような使用法:

q $COMMAND $ARGS

あるいは

q $COMMAND $ARGS; $ANOTHER_COMMAND $MORE_ARGS

入力してテストする

q sleep 10 &
q echo blubb &

10秒後にblubbが出力されることがわかります。


私は時々while kill -0 "$pid" 2&>1 >/dev/null; doラインの許可拒否エラーを取得します。何か案は?
Mrchief

わかりましたので、これを長期間使用した後では、機能しないと言えます。アクセスエラーが原因である可能性がありますが、複数のcpステップが互いに表示されています。
Mrchief


0

Linuxについては、このようなことは何も知りません(ただし、どこにも存在しないというわけではありません)。Linuxソフトウェアは、Linuxユーザーによって作成される傾向があります。経験豊富なLinuxユーザーは、このようなツールを作成することを考えないかもしれません。GUIセッション中にコピーの速度低下に気づいた場合、ターミナルに切り替えてコマンドラインからコピーする可能性が高いためです。

以下は、非常に高速でデスクトップ環境に影響を与えない基本的なコマンドラインコピーユーティリティです。

  • cp( "cp foo / path / to / bar"はfooをbarにコピーします)
  • mv( "mv foo / path / to / bar"はfooをbarに移動(名前変更)します)
  • tar( "tar cf-foo |(cd / path / to / archive /; tar xf-)"はディレクトリを再帰的にコピーします)
  • rsync( "rsync -r foo / path / to / archive /"はディレクトリを再帰的にコピーします)

0

ファイルのリストを作成し、SCPを使用してコピーを実行します。Linuxの良い点は、echoを使用してテキストファイルに追加できることです。


0

タスクをキューに入れることができるタスクスプーラーと呼ばれるこのUnixバッチシステムプロジェクトを見つけました。

またはあなたがすることができます sudo apt-get install task-spooler

インストールしたら、通常のシェルコマンドの前にts(またはtspUbuntu / Debianシステムの場合)単純に配置して、キューに入れることができます。

このページには、それの使用法についての例がたくさんあります。https://www.ostechnix.com/add-linux-commands-queue-execute-one-one/をかあなたはここでビデオを見る:https://www.youtube.com / watch?v = wv8D8wT20ZY

確認したところ、すべてのcpコマンドで期待どおりに動作しているようです。

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