
제가 막혔기 때문에 문제를 해결하기 위해 여러분의 도움을 요청합니다. 상황을 설명하겠습니다. txt 파일에 경로가 있는 파일을 두 번째 파일에 지정된 특정 하위 디렉터리에 복사하고 싶습니다(또한 다음 두 열을 포함하는 완전한 csv 파일도 있습니다: 하위 디렉터리 이름( $value1
), 파일 경로 ( $value2
))
다음 명령을 사용하여 하위 디렉터리를 자동으로 만들 수 있었습니다.
xargs mkdir -p </scripts/repertoires.csv
다음 명령을 사용하여 모든 파일을 단일 디렉터리에 복사하는 방법을 알고 있습니다.
cat /scripts/fichiers.csv | xargs -I% cp% / destinationfolder
$value2
하지만 그에 맞는 하위 디렉토리의 파일에 해당하는 각 줄을 복사할 수는 없습니다. 더 명확하게 하기 위해 /destination 폴더/에 복사하고 싶습니다.$value1
답변1
과거에 제가 했던 방식은 tar
중개인으로 사용하는 것이었습니다. 하지만 이보다 더 우아한 다른 답변이 있을 것이라고 확신합니다.
특정 기준 IE를 충족하는 파일 목록이 있는 경우:1M보다 작은 /usr의 모든 파일
$ find /usr -type f -size -1M
우리는 해당 위치에 복사하고 싶습니다 /mnt/dst
.
tar를 벡터로 사용하여 데이터를 압축/압축 해제할 수 있습니다. 즉
$ find /usr -type f -size -1M | tar --files-from=- -c | tar -xv -C /mnt/dst
첫 번째 는 파일에 대한 전체 경로의 한 줄씩 목록을 예상하고 stdout에 대한 tarball을 생성하는 를 tar
사용합니다 .--files-from
두 번째는 파이프에서 받은 타르볼을 tar
사용하여 대상 경로로 전환 하고 압축을 푼다.-C
결과는 다음과 같습니다( -v
두 번째 tar 명령에서 사용하는 경우).
usr/lib/grub/i386-pc/fdt.lst
usr/lib/python3.6/site-packages/pip/_vendor/html5lib/filters/__init__.py
usr/lib/python3.6/site-packages/pip/_vendor/urllib3/contrib/__init__.py
usr/lib/python3.6/site-packages/pip/_vendor/urllib3/contrib/_securetransport/__init__.py
usr/lib/python3.6/site-packages/pip/_vendor/urllib3/packages/backports/__init__.py
usr/lib/python3.6/site-packages/pip/operations/__init__.py
usr/lib/python3.6/site-packages/pkg_resources/_vendor/__init__.py
usr/lib/python3.6/site-packages/setuptools/_vendor/__init__.py
usr/lib/python3.6/site-packages/slip/__init__.py
usr/lib/python3.6/site-packages/slip/_wrappers/__init__.py
usr/lib/python3.6/site-packages/asn1crypto/_perf/__init__.py
...
...
결과 대상 디렉토리는 당신이 찾고 있는 것이어야 하는 (가독성을 위해 정리된) 트리를 생성합니다.
# tree -L 3 /mnt/dst
/mnt/dst
└── usr
├── lib
│ ├── grub
│ ├── node_modules
│ └── python3.6
├── lib64
│ └── python3.6
├── local
│ └── share
└── share
├── crypto-policies
├── doc
├── groff
├── microcode_ctl
├── mime
├── pki
├── texlive
├── texmf
├── vim
└── X11
20 directories, 0 files