Linux에서 특정 파일을 복사하기 위해 find와 cp를 결합하는 방법

Linux에서 특정 파일을 복사하기 위해 find와 cp를 결합하는 방법

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로 대체하려고 시도했을 때였습니다. 이는 원래 해야 할 일이지만 여전히 실망스럽습니다.

이것이 누군가에게 도움이 되기를 바랍니다!

관련 정보