[완료]cp로 카피하니 -bash: /bin/cp: Argument list too long

ahsan의 이미지

안녕하세요.
두대의 기계 사이에 nfs로 연결하여 파일복사를 해야 하는데
화일의 갯수가 4만개 정도 밖에 안되는데도 cp를 사용하면
-bash: /bin/cp: Argument list too long
이라는 메시지가 나오고 아무런 일이 안 일어납니다.

sysctl.conf에 fs.file-max=1000000
ulimit -n 1000000로 해도 안됩니다.

왜 이런일이 일어나는 걸까요?

cp가 처리할 수 있는 화일의 숫자는 몇개 인가요?

답변 부탁드립니다

jg의 이미지

디렉토리 내에 있는 파일을 모두 복사하신다면 아래 같은 방법으로는 안되나요?

cd (복사할디렉토리)
cp -r . (대상디렉토리)

--
perl -e's@@JEON Myoung-jin@;sub man{s| _|her e|}
sub see{s;^;Just;;u;s;e ;Perl ;;to;print$_,$/}$uperMan=M;
s=^....=U are not=;s~$uperMan~~;&admitIt;s=U are = A=;s|young|_|;&man;
sub admitIt{say;ye;s!-\w+! Hacker!};see U'

$Myoungjin_JEON=@@=qw^rekcaH lreP rehtonA tsuJ^;$|++;{$i=$like=pop@@;unshift@@,$i;$~=18-length$i;print"\r[","~"x abs,(scalar reverse$i),"~"x($~-abs),"]"and select$good,$day,$mate,1/$~for 0..$~,-$~+1..-1;redo}

ahsan의 이미지

전체 복사가 아니라 7일 이전에 생성된 것들만 복사하는 경우입니다. 어쨌던 답변은 감사합니다.

warpdory의 이미지

cp 가 처리할 수 있는 파일 갯수는 잘 모르겠는데.. 비슷한 경험은 많이 해 봤습니다.

그럴 땐 보통 rsync 등을 쓰면 되고...

제 경우는 ... mc 를 주로 씁니다. .. 말끔하게 되더군요. (속도는 좀 느립니다.)

---------
귓가에 햇살을 받으며 석양까지 행복한 여행을...
웃으며 떠나갔던 것처럼 미소를 띠고 돌아와 마침내 평안하기를...
- 엘프의 인사, 드래곤 라자, 이영도

즐겁게 놀아보자.
http://akpil.egloos.com


---------
귓가에 햇살을 받으며 석양까지 행복한 여행을...
웃으며 떠나갔던 것처럼 미소를 띠고 돌아와 마침내 평안하기를...
- 엘프의 인사, 드래곤 라자, 이영도

즐겁게 놀아보자.

ahsan의 이미지

mc는 안 써봤지만 앞으로는 rsync를 써봐야겠네요.
혹시 한 폴더내에 100만개의 화일 중에서 rsync로 7일 이전에 생성된 것만 move 할 수 있나요?

redneval의 이미지

1. 원인

ARG_MAX : the maximum length of arguments to the exec function
(more precise: bytes of args plus environment for exec)

$ getconf ARG_MAX
131072

2. 해결방법

tar 로 묶은 다음

$ cd [해당디렉터리]; find . -name '*' -print | tar cvf [적당한경로]/temp.tar --files-from -

풀면 되지 않을까요.

출처 : http://michael-prokop.at/blog/2007/02/26/argument-list-too-long/

ahsan의 이미지

100만개의 화일이 있는 폴더에서 7일 이전에 생성된 화일만을 tar로 묶는데
현재날짜보다 7일 이전의 날짜로 tar화일이름를 생성하고 생성된 화일을
move시키는 방법이 있을까요?

feanor의 이미지

윈도와 달리 유닉스에서 와일드카드(*) 확장이 쉘에서 일어나고, 프로세스의 명령행 길이에 제한이 있기 때문에 일어나는 현상입니다. cp 같은 개별 프로그램과는 무관합니다.

제 개인적인 생각으로는 유닉스의 디자인 버그입니다.

때늦은 감이 있긴 하지만 리눅스 커널 2.6.23에 하드코딩된 명령행 길이 대신 동적으로 메모리를 할당하도록 하는 패치가 포함되었습니다.

http://lkml.org/lkml/2007/6/13/67

ganadist의 이미지

커널 업데이트후 테스트 해보니 잘되네요.

ganadist@ganadist /tmp $ uname -a
Linux ganadist 2.6.23-rc4 #1 SMP Thu Aug 30 18:05:07 KST 2007 i686 Intel(R) Pentium(R) 4 CPU 3.20GHz GenuineIntel GNU/Linux
ganadist@ganadist /tmp $ cat main.c
#include <stdio.h>
 
int main(int argc, char **argv)
{
    return printf("argc = %d\n", argc);
}
ganadist@ganadist /tmp $ gcc -o argc_check main.c
ganadist@ganadist /tmp $ ./argc_check `seq 100000`
argc = 100001

----
Do not feed troll!

----
데스크탑 프로그래머를 꿈꾸는 임베디드 삽질러

ahsan의 이미지

커널 2.6.23 이후의 리눅스 버전에서는 가능하다는 건가요?
저는 CentOS 4.4에서 5.0까지를 쓰고 있는데 잘 찾아봐야겠군요.

지리즈의 이미지

갑자기 생각나네요.

저는 복사할 파일수가 많아지면 rsync를 선호하는 편입니다.
cp가 가지고 있는 기능은 거의 다 가지고 있고, 무엇보다 cp 보다는 보는데 덜 지루하더라구요. ^^

따라서, 파일수가 많아서 복사가 안될 때도 rsync로 해결한다고 해야 겠지요.

rsync -aPv /src_dir /tgt_dir

그런데, 삭제시 rm 도 파일수가 많으면 cp처럼 똑같은 오류가 발생합니다.
어떻게 할까 고민 끝에 rsync로 지웠어요.

mkdir /tmp/empty
rsync -aPv --delete /tmp/empty /tgt_dir

서브디렉토리까지 싹 삭제해줍니다. ^^

rm 대신 rsync를 쓸까봐요. ^^ 보는데 덜 지루하니까...

There is no spoon. Neo from the Matrix 1999.

There is no spoon. Neo from the Matrix 1999.

ahsan의 이미지

아주 재미있는 아이디어이군요
감사합니다.
혹시 한 폴더내에 100만개의 화일 중에서 rsync로 7일 이전에 생성된 것만 move 할 수 있나요?

netj의 이미지

cp *.data /target/

가 잘 안된다면, 대신에

find -name '*.data' | xargs -I{} cp {} /target/

처럼 find와 xargs를 이용하거나

find -name '*.data' -exec cp {} /target/ \;

처럼 find만 이용하는 방법이 있겠습니다.

그러나 매 파일마다 cp를 띄우니 비효율적이죠 :(
그런 때는 rsync나 tar에서 exclude/include를 적절히 활용하면 됩니다.

rsync -a --exclude='*' --include='*.data' . /target/

--
Every truth is in the detail.

ahsan의 이미지

혹시 한 폴더내에 100만개의 화일 중에서 rsync로 7일 이전에 생성된 것만 move 할 수 있나요?

jg의 이미지

흠.. cp -r 로 되기는 되는군요. 전체 복사라 좀 그렇지만 =_=;

. 으로 시작하는 파일을 제외시키려면 이런 식으로도 될 것 같네요.
(그냥 이건 재미로 봐주세요. :-)

ls -1 | split -l 10000 - __LIST__
OLDIFS=$IFS
IFS=$'\n'
 
for list in __LIST__*; do cp $(<$list) "옮길곳"; done
rm __LIST__*
 
IFS=$OLDIFS
unset OLDIFS

뭐 다른 필터링이 필요하면 ls 와 split 사이에 grep이나 sed 등으로 필터링하시면 되겠구요.

--
perl -e's@@JEON Myoung-jin@;sub man{s| _|her e|}
sub see{s;^;Just;;u;s;e ;Perl ;;to;print$_,$/}$uperMan=M;
s=^....=U are not=;s~$uperMan~~;&admitIt;s=U are = A=;s|young|_|;&man;
sub admitIt{say;ye;s!-\w+! Hacker!};see U'

$Myoungjin_JEON=@@=qw^rekcaH lreP rehtonA tsuJ^;$|++;{$i=$like=pop@@;unshift@@,$i;$~=18-length$i;print"\r[","~"x abs,(scalar reverse$i),"~"x($~-abs),"]"and select$good,$day,$mate,1/$~for 0..$~,-$~+1..-1;redo}

익명 사용자의 이미지

cd [source directory]
find . -mtime -100 -mtime +3 -type f -print > ~/includelist.txt
tar cf - -I ~/includelist.txt | (cd [destination directory]; tar xvfBp -)

최근 100일 이내지만 3일은 넘은 파일리스트를 find 명령으로 만들어서 임시파일로 만든다음
tar 명령의 -I 인자로 주면 됩니다.

깔쌈하게 잘되염~~~

바나나쥬스의 이미지

그리고 exclude 하고 싶은 파일이 있다면 find로 ~/excludelist.txt 파일을 임시로 만든담에

tar cfX - ~/excludelist.txt -I ~/includelist.txt | (cd [destination directory]; tar xvfBp -)

이렇게 하심 됩니다.

빠나나쥬스의 이미지

$ man tar
     -I file
     --files-from file       Get names of files to extract or create from
                             file, one per line.
     -X file
     --exclude-from file     Exclude files listed in file.

저도 저것땜에 한 세시간은 삽질했었습니다.

빠나나쥬스의 이미지

$ man tar
     -I file
     --files-from file       Get names of files to extract or create from
                             file, one per line.
     -X file
     --exclude-from file     Exclude files listed in file.

저도 저것땜에 한 세시간은 삽질했었습니다.

익명 사용자의 이미지

이거 사이트가 이상한 건지 반응이 없어서 버튼을 막 눌렀더니 막 똑같은 내용이 막 올라가네요.
도배해서 죄송합니다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.