Programm zum Kopieren / Verschieben / Löschen von Dateien in die Warteschlange unter Linux?

10

Ich habe im Internet nach der Antwort von Linux auf etwas wie Teracopy (Windows) gesucht ... konnte aber nichts Passendes finden.

Die nächsten Dinge, die ich bekam, sind:

Kann mir jemand ein einfaches Tool zum Kopieren von Dateien empfehlen, mit dem Dateien zum Kopieren / Verschieben / Löschen in die Warteschlange gestellt werden können? Am besten, wenn ich von Nautilus ziehen und ablegen kann.

Wenn so etwas nicht existiert, kann mir bitte jemand sagen warum? ... bin ich die einzige Person, die so etwas braucht?

koss
quelle
2
Wenn Sie genau erklären könnten, was Sie wollen, wäre es nützlich. Ich denke, die meisten Linux-Benutzer werden mit "Teracopy" nicht vertraut sein.
Peltier
1
Liegt das daran, dass große Kopien und Löschvorgänge einige Zeit in Anspruch nehmen und die GUI-Oberfläche während der Ausführung nicht verfügbar / weniger nützlich ist?
dmckee --- Ex-Moderator Kätzchen
Eine teilweise Erklärung für diese Anfrage ist hier zu finden: superuser.com/questions/9284/...
Dmckee --- ex-Moderator kitten
Moment mal, ist MiniCopier nicht für Linux verfügbar? Es ist eine Java-App.
Ryan C. Thompson
1
@ Tobu Terracopy kann mehrere Kopieraufträge in die Warteschlange stellen und
anhalten

Antworten:

3

Ich habe gerade dieses einfache Skript geschrieben, das ich 'cpw' nannte, um dieses Problem zu lösen.

Sie verwenden es genau so, wie Sie cp verwenden würden. Der einzige Unterschied besteht darin, dass es ein Array aller cpw-Prozesse erstellt, die bereits beim Start ausgeführt werden, und darauf wartet, dass sie beendet werden, bevor die Befehle an cp weitergeleitet werden. Auf diese Weise verhält es sich wie eine selbstorganisierende Warteschlange.

Sie können weiterhin Hintergrund-CPU-Jobs hinzufügen, diese treten jedoch nicht aufeinander. Sie werden einzeln ausgeführt.

Ich bin sicher, andere können Verbesserungen vorschlagen.

#!/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

Anwendungsbeispiel:

$ cpw -R /src/tree /dest/tree &
Josh Arenberg
quelle
Nur eine Warnung, ich habe dieses Skript ausprobiert und aus einem Grund, den ich nicht weiter untersucht habe, kann es unbegrenzt hängen bleiben und darauf warten, dass andere Skripte fertig sind. Der zuverlässigere Weg, um Exklusivität in Bash zu erreichen, ist die Verwendung von Flock -e. Siehe zum Beispiel hier: stackoverflow.com/questions/17996577/…
px1mp
1

Nach meiner Erfahrung reduziert das gleichzeitige Erstellen einiger Kopien unter Linux den Gesamtdurchsatz nicht wirklich. Meine Messung des Durchsatzes basiert auf dem Argument -P von rsync. In meinem speziellen Fall werden mehrere Ordner mit großen Dateien gleichzeitig separat von einer USB-Festplatte kopiert.

Wenn Sie also nicht viele Dinge gleichzeitig kopieren , sollte es Ihnen gut gehen.

Ryan C. Thompson
quelle
Tut mir leid zu sagen, aber das ist eher ein Kommentar. Viele Meinungen, nicht wirklich eine Antwort.
Mrchief
1

Da das von Josh Arenberg gegebene Drehbuch möglicherweise einige Deadlocking-Probleme aufweist (die ich bisher nicht erlebt, aber auch nicht untersucht habe), habe ich selbst etwas geschrieben. Es sollte keine Deadlocking-Probleme geben. Es funktioniert auch für jeden Shell-Befehl, nicht nur für 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

Es wird eine Kette von Prozessen erstellt, die jeweils auf den vorherigen warten. Wenn ein Prozess in der Mitte der Kette während des Wartens abstürzt (unwahrscheinlich, aber nicht unmöglich), ist die Kette gebrochen und beide Teile laufen parallel. Das gleiche passiert, wenn einer der Prozesse abgebrochen wird.

Verwendung wie folgt:

q $COMMAND $ARGS

oder auch

q $COMMAND $ARGS; $ANOTHER_COMMAND $MORE_ARGS

Testen Sie zB durch Tippen

q sleep 10 &
q echo blubb &

und feststellen, dass nach 10 Sekunden blubb gedruckt wird.

Sonntag
quelle
Ich bekomme manchmal die Erlaubnis verweigert Fehler für while kill -0 "$pid" 2&>1 >/dev/null; doLeitung. Irgendwelche Ideen?
Mrchief
Ok, nachdem ich das für eine lange Zeit benutzt habe, kann ich sagen, dass es nicht funktioniert. Vielleicht ist der Zugriffsfehler die Ursache dafür, aber ich kann mehrere cpSchritte aufeinander sehen.
Mrchief
1

Ultracopier ist eines, das Sie wollen, mit Nemo- Plugin oder Nautilus- Plugin .

Kokizzu
quelle
0

Ich kenne so etwas für Linux nicht (obwohl das nicht heißt, dass es nirgendwo einen gibt). Linux-Software wird in der Regel von Linux-Benutzern geschrieben. Erfahrene Linux-Benutzer denken möglicherweise nicht daran, ein solches Tool zu erstellen, da sie, wenn sie während einer GUI-Sitzung eine Verlangsamung der Kopien bemerken, wahrscheinlich zu einem Terminal wechseln und über die Befehlszeile kopieren.

Im Folgenden finden Sie einige grundlegende Dienstprogramme zum Kopieren von Befehlszeilen, die sehr schnell sind und sich nicht auf Ihre Desktop-Umgebung auswirken sollten:

  • cp ("cp foo / path / to / bar" kopiert foo in bar)
  • mv ("mv foo / path / to / bar" verschiebt (umbenennt) foo in bar)
  • tar ("tar cf - foo | (cd / path / to / archive /; tar xf -)" kopiert rekursiv ein Verzeichnis)
  • rsync ("rsync -r foo / path / to / archive /" kopiert rekursiv ein Verzeichnis)
Quacksalber
quelle
0

Erstellen Sie eine Liste mit Dateien und führen Sie die Kopie mit SCP aus. Das Schöne unter Linux ist, dass Sie Ihre Textdatei mit Echo hinzufügen können.

Joshua K.
quelle
0

Ich habe dieses Unix Batch System-Projekt namens Task Spooler gefunden, mit dem Sie Aufgaben in die Warteschlange stellen können.

Oder du kannst es tun sudo apt-get install task-spooler

Einmal installiert, können Sie einfach ts(oder tspfür Ubuntu / Debian-Systeme) vor jeden regulären Shell-Befehl stellen, um ihn in die Warteschlange zu stellen.

Diese Seite enthält viele Beispiele für die Verwendung: https://www.ostechnix.com/add-linux-commands-queue-execute-one-one/ oder Sie sehen sich hier ein Video an: https://www.youtube.com / watch? v = wv8D8wT20ZY

Ich habe es überprüft und es scheint für alle meine cpBefehle wie erwartet zu funktionieren .

Mrchief
quelle