2011-09-23 5 views
0

이동하려는 파일 위치 목록이있는 텍스트 파일이 있습니다. 먼저 임시 디렉토리로 이동하고 원본 디렉토리에서 파일을 이동 한 다음 파일을 원래 위치로 다시 이동하십시오.`xargs`는이 문제와 관련이 있습니까?

목록 파일은 다음과 같은 말에 의해 생성 된 포맷하는 find 명령,이다 : 나는 화면에서 파일을 조작 할 수 sed를 사용하고 현재

~/$ find . -name "*.[ch]" > ~/tmp/my_file_list.txt 

하고, 절단 및 출력을 붙여 명령을 실행합니다. 나는이 공격을 찾을 수 있지만, 그것은 작동 :

~/$ sed -r 's_.+_cp & ~/tmp/_' ~/tmp/my_file_list.txt 

~/$ sed -r 's_.+/(.+)_cp ~/tmp/\1 &_' ~/tmp/my_file_list.txt 

(복사 ... 붙여 넣기 ... 주춤)

(복사 및 붙여 넣기 출력, 다시 파일을 넣어)

어떻게 단순히 복사 및 붙여 넣기없이 위의 두 줄을 할 수 있을까 ... 나는 xargs 내가 갈망 솔루션을 개최 생각.

[편집]공백 다루는 : bash로 출력

~/$ sed -r 's_.+_cp "&" ~/tmp/_' ~/tmp/my_file_list.txt 

~/$ sed -r 's_.+/(.+)_cp "~/tmp/\1" "&"_' ~/tmp/my_file_list.txt 
+1

파일 이름에 공백이 포함되어 있습니까? –

+0

아니요,하지만 일반적인 경우의 결함을 지적하면 편집 할 것입니다. – Jamie

답변

3

단순히 파이프 :

~/$ sed -r 's_.+_cp & ~/tmp/_' ~/tmp/my_file_list.txt | bash 
,536,
+0

나는 그 일을 할 수 있는지 몰랐다. 감사. – Jamie

0

복사 - 붙여 넣기 문제를 해결하는 답변을 이미 보았지만 실제로는 rsync을 사용하시기 바랍니다. 로 갈 것 순서는 다음과 같습니다

~/$ find . -name "*.[ch]" > ~/tmp/my_file_list.txt 

백업하려면 :

~/$ rsync --files-from=tmp/my_file_list.txt . tmp/ 

원본 파일, 다음 복원 무엇 이건 :

~/$ rsync --files-from=tmp/my_file_list.txt tmp/ . 

이의 (무시) ​​장점이있다 수정하지 않은 파일은 복사하지 않으므로 약간의 디스크 활동을 절약 할 수 있습니다. rsync은 상대 경로를 보존하기 때문에 서로 다른 디렉토리에 같은 이름의 파일이 여러 개있는 경우 충돌하지 않습니다.