조금이나마 도움을 받을 수 있다면 정말 기쁘겠습니다. 디렉토리 구조의 스냅샷을 상상해 봅시다:
../test1/test6/test62.txt
../test1/test6/test65.txt
../test1/test6/test67.txt
../test1/test6/test69.txt
../test1/test6/test60.txt
../test1/test6/test68.txt
../test1/test6/test63.txt
../test1/test6/test66.txt
../test1/test6/test64.txt
../test1/test6/test61.txt
../test2/test1/test2.txt
../test2/test1/test9.txt
../test2/test1/test1.txt
../test2/test1/test6.txt
../test2/test1/test3.txt
../test2/test1/test8.txt
../test2/test1/test4.txt
../test2/test1/test10.txt
../test2/test1/test5.txt
../test2/test1/test7.txt
나의 궁극적인 목표는 모든 .txt 파일을 새 디렉터리(예: 대상)에 복사하는 것입니다.
실제로는 많은 디렉토리가 있습니다.
아주 좋은 cp 명령을 찾았습니다.
cp ../**/**/*.txt .
하지만 문제가 있습니다. 250GB 이미지 등 파일이 많아 cp 오류는 다음과 같습니다.
Argument list too long
rsync를 사용하여 이 작업을 수행하는 방법에 대해 조금 읽었으며 이것이 올바른 방법인 것 같지만 명령을 작성하고 제외하고 포함할 항목을 정확하게 작성하는 데 머리를 감쌀 수 없습니다.
답변1
모든 디렉토리 경로가 ..
. 개인적으로 저는 한 단계 더 올라가 파일을 지정된 하위 디렉토리에 복사/이동/링크하는 것을 권장합니다.
그러나 이렇게 하면 ..
이전에 복사한 파일을 복사하려고 시도하지 않도록 할 수 있습니다.
find ../ -mindepth 3 -type f -name '*.txt' -exec cp --target-directory . -- {} +
ln
복사하는 대신 링크가 충분 하다면 cp
, 그런데 확인해 보시면 됩니다. 마찬가지로 mv
움직임이 원하는 의도인 경우에도 마찬가지입니다. cp -p
권한, 타임스탬프 등을 보존하려는 경우에 사용하세요.
동일한 이름을 가진 파일이 두 개 이상 있으면 마지막 복사본을 제외한 모든 파일을 덮어쓰게 됩니다. 마지막 항목을 제외한 모든 항목을 사용하면 mv
해당 항목이 손실됩니다. 첫 번째 것만 사용하면 ln
성공적으로 연결됩니다.
답변2
작동하는 작동하는 솔루션을 찾았습니다. find 및 rsync를 사용합니다.
find ../. -type f -name "*.txt" -exec rsync -av {} . \;