file-locations
다음 형식의 파일에 긴 위치 목록이 있습니다 .
/mnt/q/fire/210407_NB552563_0007*/analysis/annotation/FIRID-5382*/*.gff
다음 라이너 중 하나를 사용하여 현재 위치에 복사해 보았습니다.
for i in `cat file-locations`; do cp $i .; done
하지만 그것은 도움이 되지 않습니다. 영원히 "실행"되며 Ctrl+C 없이는 종료되지 않습니다.
내가 뭘 잘못하고 있는지 이해가 안 돼요. 어떤 아이디어가 있나요?
ベストアンサー1
파일 위치가 제공한 glob과 일치하면 해당 glob을 사용하여 파일 세트와 일치시키기만 하면 됩니다.
cp -v /mnt/q/fire/210407_NB552563_0007*/analysis/annotation/FIRID-5382*/*.gff .
루프도 필요 없고 경로 파일도 필요 없습니다.~하지 않는 한파일 세트는 실제로 glob 패턴과 일치하는 파일의 분리된 세트입니다.
파일 목록을 읽어야 하는 경우 모든 파일 이름에 개행 문자가 포함되어 있지 않다고 가정해야 합니다( touch $'surprise\nname'
). 그런 다음 줄 단위로 파일 이름을 읽을 수 있습니다.
while IFS= read -r filename
do
cp -v "$filename" .
done <file-locations
cp
로그 출력 형식을 제어하려면 이 루프의 명령을 다음 두 줄로 바꾸십시오.
printf "Copying %s: " "$filename" >&2
cp "$filename" . && echo ok >&2