Linux에서 다음과 같은 문제가 발생했습니다.
디렉터리에서 특정 파일을 찾아 이 파일(있는 경우)을 다른 디렉터리에 복사해야 합니다.
다음은 명령입니다(log라는 단어로 시작하는 특정 텍스트 파일을 찾아야 합니다). 명령이 작동하는 가장 최근 파일 10개만 가져옵니다.
find /mydir -type f -name 'log*.txt' | tail -n 10
재귀가 필요하지 않습니다. 파일을 찾아서 복사하기만 하면 됩니다.
하지만 이것을 복사 명령과 함께 사용하는 데 문제가 있습니다.
find /mydir -type f -name 'log*.txt' | tail -n 10 -exec cp --parents \{\} /tmp/mydir \;
-exec를 실행할 수 없습니다. 여기에 문제가 있습니다.
감사해요
답변1
xargs
모든 파일을 복사하는 데 사용하겠습니다 .
cp
전달된 모든 인수에 대해 실행되는 xargs로 출력을 파이프할 수 있습니다 . 이것위키피디아이 기사에서는 xargs
제가 할 수 있는 것보다 더 잘 설명하고 있습니다. Linux 맨페이지를 확인해 보세요.
원하는 것을 수행하라는 호출은 다음과 같습니다.
find /mydir -type f -name 'log*.txt' | tail -n 10 | xargs -I % cp % /tmp/mydir/
-I
다음 플래그는 % cp %
전달된 모든 인수가 마지막 인수에 연결됨을 의미합니다.%
답변2
스크립트에서 변수를 사용하기 위한 추가 사용 사례 솔루션:
#!/bin/bash
path1=/mydir
path2=/tmp/mydir
filetype=log*.txt
find_file="$(find $path1 -type f -name "$filetype" -printf "%f\n" | tail -n 10)"
for f in $find_file
do
cp $f $path2
done
나는 cp 변수를 시도하기 전에 find, grep, awk, xargs, 루프 등을 구현하려고 시도하면서 사용 사례에 맞게 cp 명령을 다시 작성하는 데 거의 2일을 보냈습니다. 보라, 그것은 효과가 있었다. 나의 주요 중단점은 find 명령이 모든 파일 이름을 $find_file에 저장하고 실제로 존재하지 않는 것을 cp로 대체하려고 시도했을 때였습니다. 이는 원래 해야 할 일이지만 여전히 실망스럽습니다.
이것이 누군가에게 도움이 되기를 바랍니다!