한 폴더에서 다른 폴더로 복사된 각 파일의 파일 경로를 가져옵니다.

한 폴더에서 다른 폴더로 복사된 각 파일의 파일 경로를 가져옵니다.

저는 Ubuntu 18.04 LTS를 사용하고 있으며 한 폴더에서 다른 폴더로 파일을 복사하고 싶고, 폴더1에서 폴더2로 복사된 각 파일의 파일 경로를 공백을 구분 기호로 사용하여 세 번째 파일에 저장하려고 합니다.
참고: cp 명령은 출력을 반환하지 않으므로 파일에 저장하면 작동하지 않습니다.

터미널을 통해 실행할 수 있는 명령이나 스크립트의 조합을 사용할 수 있습니다.

다른 소프트웨어를 제안하지 마십시오.

답변1

POSIX 명령을 사용하고 파일 및 디렉터리 이름에 개행 문자가 포함되어 있지 않다고 가정합니다.

src=/some/dir
dst=/some/other/dir
file_list=/path/to/list.txt
(cd -P -- "$src" && find . |
  tee -- "$file_list" |
  pax -rwdpe -- "$dst")

$src경로는 또는 디렉토리 에 상대적입니다 $dst(기존에 존재해야 함).

GNU 구현 cp(Ubuntu에서 볼 수 있듯이)에는 -v자신이 수행하는 작업을 알려주는 옵션이 있습니다.

LC_ALL=C cp -va -- "$src" "$dst" > "$file_list"

다음을 포함하는 콘텐츠를 생성합니다 list.txt.

'/some/dir' -> '/some/other/dir'
'/some/dir/file' -> '/some/other/dir/file'
[...]

또 다른 옵션은 다음을 사용하는 것입니다(표준 명령은 아니지만 Ubuntu는 tar기본적으로 GNU와 함께 제공됩니다).tar

(cd -P -- "$src" && tar cf - .) |
  (cd -P -- "$dst" && tar xvf - > "$file_list")

답변2

find및 를 조합하여 에서 cpio으로 모든 파일과 하위 폴더를 반복적으로 복사할 수 있습니다 . 중간 에는 모든 파일 이름( 에 상대적인 ) 을 쓸 수 있습니다 .folder1folder2teefolder1outputfile

cd folder1 && find . -depth | tee outputfile | cpio -pdm folder2

소스 폴더를 기준으로 파일 이름을 가져오려면 이 명령이 cd folder1필요합니다 .cpio

folder2절대 또는 상대 로 지정해야 합니다 folder1.

파일만 복사하려면 find다음 명령을 수정하면 됩니다.

... find . -type f -maxdepth 1 ...

관련 정보