在 Linux 中用于复制/移动/删除的排队文件程序?

在 Linux 中用于复制/移动/删除的排队文件程序?

我在网上搜索 Linux 对 Teracopy(Windows)之类的问题的答案......但没有找到任何合适的东西。

我得到的最接近的东西是:

有人能推荐一款简单的文件复制工具给我吗?它可以将文件排队进行复制/移动/删除?最好能从 Nautilus 进行拖放。

如果不存在这样的东西,有人可以告诉我为什么吗?...我是唯一需要这样东西的人吗?

答案1

我刚刚编写了这个简单的脚本(我称之为“cpw”)来解决这个问题。

使用它就像使用 cp 一样... 唯一的区别是它在启动时会构建一个已在运行的任何 cpw 进程的数组,并等待它们完成,然后再将命令传递给 cp。这样,它就像一个自组织队列。

您可以继续添加后台 cpw 作业,但它们不会互相影响。它们将一次执行一个。

我确信其他人也可以提出改进建议。

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

答案2

由于 Josh Arenberg 提供的脚本可能存在一些死锁问题(到目前为止我还没有遇到过,但也没有调查过),所以我自己编写了一些脚本。它应该不会有死锁问题。它也适用于任何 shell 命令,而不仅仅是 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

它创建了一个进程链,每个进程都在等待前一个进程。如果链中间的进程在等待时崩溃(可能性不大,但并非不可能),则该链将被破坏,并且两个部分将并行运行。如果其中一个进程被终止,也会发生同样的情况。

用法如下:

q $COMMAND $ARGS

甚至

q $COMMAND $ARGS; $ANOTHER_COMMAND $MORE_ARGS

测试例如输入

q sleep 10 &
q echo blubb &

并发现 10 秒后打印出了 blubb。

答案3

超级复印机是你想要的,与 Nemo插入或 Nautilus插入

答案4

创建文件列表并使用 SCP 执行复制。Linux 的优点是您可以使用 echo 将其添加到文本文件中。

相关内容