100개의 로그 파일이 있는 폴더가 있는데 그 중 일부는 데이터가 있고 일부는 데이터가 없습니다. 데이터가 있는 파일을 선택하고 "goodfiles.txt"라는 텍스트 파일에 이름을 저장하는 스크립트가 있습니다. 텍스트 파일의 파일을 읽고 다른 폴더로 이동하는 방법을 알고 싶습니다. 나는 이것을 시도했지만cat /root/testing2/goodfiles.txt | xargs mv -f /root/testing2/moved/
다음과 같은 오류가 발생했습니다.
mv: 대상(log1508.log) 은 mv: 디렉터리 또는 파일을 이동할 디렉터리여야 합니다 .
누구든지 나를 도와줄 수 있나요?
답변1
다음은 약간 다르지만 개념적으로는 간단한 접근 방식입니다(파이프 제외).
for fileName in `cat goodfiles.txt`; do mv $fileName /root/testing2/moved/; done
답변2
--replace 옵션을 사용하여 xargs가 대체하는 부분을 변경하고 대체 문자열을 지정할 수 있다는 점을 기억하는 것이 도움이 된다고 생각합니다. 그렇지 않으면 줄을 끝에 추가합니다.
나는 거의 같은 일을 할 수 있었다
cat filelist |xargs --replace='{}' mv {} ./targetdir/
어쩌면 시도해 볼 수도 있습니다.
cat /root/testing2/goodfiles.txt |xargs --replace '{}' /root/testing2/moved
답변3
여러 소스를 단일 대상으로 이동하기 위해 정확히 원하는 옵션 과 -f
GNU 옵션을 혼동 하고 있는 것 같습니다 .mv
-t
xargs
mv [OPTION]... -t DIRECTORY SOURCE...
plain은 xargs
입력을 공백으로 구분된 인수로 나누므로 파일 이름에 공백이 포함되어 있으면 명령이 중단됩니다. 동시에 그것은 또한우루무치대학교.
그래서
xargs -d'\n' mv -t /root/testing2/moved/ </root/testing2/goodfiles.txt