리눅스에서 복사 / 이동 / 삭제를위한 큐 파일 프로그램?


10

인터넷에서 Teracopy (Windows)와 같은 Linux의 답변을 검색했지만 적절한 것을 찾을 수 없었습니다.

내가 얻은 가장 가까운 것은 다음과 같습니다.

누군가 복사 / 이동 / 삭제를 위해 파일을 대기열에 넣을 수있는 간단한 파일 복사 도구를 추천 할 수 있습니까? 노틸러스에서 드래그 앤 드롭 할 수 있다면 바람직합니다.

이와 같은 것이 존재하지 않으면 누군가 왜 그런지 말해 줄 수 있습니까? ... 이것이 필요한 유일한 사람입니까?


2
원하는 것을 정확하게 설명 할 수 있다면 유용 할 것입니다. 대부분의 Linux 사용자는 "Teracopy"에 익숙하지 않을 것입니다.
Peltier

1
큰 사본 및 삭제에 시간이 걸리고 GUI 인터페이스를 사용할 수 없거나 실행 중에 유용하지 않기 때문입니까?
dmckee --- 전 운영자 고양이

이 요청에 대한 부분적인 설명은 여기에서 찾을 수 있습니다 : superuser.com/questions/9284/…
dmckee --- 전 운영자 고양이

잠깐만, Linux에서는 MiniCopier를 사용할 수 없습니까? Java 앱입니다.
Ryan C. Thompson

1
@Tobu Terracopy는 여러 개의 복사 작업을 대기 및 일시 중지 할 수 있습니다
Kokizzu

답변:


3

방금이 문제를 해결하기 위해 '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 &

경고, 나는이 스크립트를 시도했으며 더 이상 조사하지 않은 이유로 다른 스크립트가 끝날 때까지 무기한 대기 할 수 있습니다. bash에서 독점 성을 달성하는 가장 안정적인 방법은 flock -e를 사용하는 것입니다. 예를 들어 여기를 참조하십시오 : stackoverflow.com/questions/17996577/…
px1mp 20시 47 분

1

필자의 경험에 따르면 Linux에서 몇 개의 사본을 동시에 수행한다고해서 전체 처리량이 실제로 줄어들지는 않습니다. 처리량 측정은 rsync의 -P 인수를 기반으로합니다. 필자의 특별한 경우는 대용량 파일로 가득 찬 여러 폴더를 USB 하드 드라이브에서 동시에 복사하는 것입니다.

따라서 한 번에 많은 것을 복사하지 않으면 괜찮을 것입니다.


유감스럽게도, 이것은 의견과 비슷합니다. 많은 의견, 실제로 대답은 아닙니다.
Mr.

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

각 프로세스는 이전 프로세스를 기다리는 프로세스 체인을 만듭니다. 기다리는 동안 체인 중간에있는 프로세스가 충돌하면 (아마도 불가능하지는 않지만) 체인이 끊어지고 두 부분이 병렬로 실행됩니다. 프로세스 중 하나가 종료 된 경우에도 마찬가지입니다.

이와 같은 사용법 :

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줄에 대한 권한 거부 오류가 발생합니다 . 어떤 아이디어?
Mr.

좋아, 그래서 이것을 오랫동안 사용하면 작동하지 않는다고 말할 수 있습니다. 어쩌면 액세스 오류가 원인 일 수 있지만 cp서로 여러 단계를 밟을 수 있습니다 .
Mr.


0

나는 리눅스에서 이와 같은 것을 모른다. (어딘가에 없다고 말할 수는 없다). 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를 사용하여 복사를 수행합니다. 리눅스에서 좋은 점은 echo를 사용하여 텍스트 파일에 추가 할 수 있다는 것입니다.


0

작업 스풀러라는 유닉스 배치 시스템 프로젝트를 발견했습니다.

아니면 할 수 있습니다 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.