themes.txt
다양한 폴더에 이름이 다르지만 내용이 다른 파일이 많이 흩어져 있습니다.
locate
(!!! 아님) 명령을 사용하여 find
검색 하고 cp -backup
명령을 사용하여 이름이 지정된 폴더에 복사하고 싶습니다 /home/myhome/1
.
Linux Mint 20.3에서 가능합니까? 그렇지 않다면 대체 솔루션이 있습니까?
답변1
옵션(NUL로 구분된 출력용) 및 (파일이 여전히 존재하는지 확인하기 위한 추가 검사)을 locate
지원 하고 GNU 및 and 에 대한 지원이 있는 경우 (모두 Linux Mint의 경우에 해당되어야 함):-0
-e
cp
sort
xargs
-r
-0
LC_ALL=C locate -0e '*/themes.txt' |
LC_ALL=C sort -zV |
xargs -r0 cp -t ~/1 --backup=numbered
이는 sort -V
파일이 복사되는 무작위가 아닌 순서(여기서는 버전 순서)를 얻기 위한 것으로, 이는 필요하지 않습니다.
호출된 정확한 파일을 locate -0e '*/themes.txt'
검색 하려면 이 작업을 수행할 수도 있습니다. 구현이 훨씬 더 빠르다는 것을 알았습니다 ( 대신 사용할 수 있다고 수동에 언급되어 있지만 적어도 구현에서는 작동하지 않습니다).themes.txt
locate -0be '[t]hemes.txt'
mlocate
mlocate
\themes.txt
'[t]hemes.txt
plocate
답변2
cp --backup=numbered $(locate themes.txt) /home/myhome/1
답변3
IMHO, locate
출력을 구문 분석해야 하는 모든 작업의 경우 find
쉘 루프를 사용하는 것이 가장 좋습니다. 이는 부분적으로는 Unix 파일 이름의 특성(개행 문자가 포함될 수 있음) 때문이고 부분적으로는 locate
사용된 데이터베이스가 오래되었을 수 있기 때문입니다.
find
and를 사용 하지 않고도 locate
이를 수행 할 수 있습니다 bash
.
shopt -s globstar
shopt -s nullglob dotglob
for pathname in ./**/themes.txt; do
cp -b "$pathname" ~/1/
done
**
이렇게 하면 먼저 경로 이름 내에서 일치하는 /
(따라서 하위 디렉터리에 "반복적으로") 일치하는 와일드카드 패턴을 사용할 수 있습니다 . 그런 다음 nullglob
일치하지 않는 패턴을 제거하고 dotglob
숨겨진 이름에 대한 패턴 일치를 허용할 수 있습니다.
이 루프는 이동하려는 모든 이름을 반복하여 현재 디렉토리 또는 하위 디렉토리에서 일치시킨 다음 각 이름 cp -b
( 동일함)을 -b
홈 디렉토리 아래에 --backup
호출된 디렉토리 에 복사합니다.1
이는 현재 디렉토리가 홈 디렉토리가 아니라고 가정합니다. 이는 대상 디렉토리의 파일을 포함하기 때문입니다.
이러한 파일 중 일부만 가지고 있다는 것을 알고 있는 경우 themes.txt
다음 명령을 사용할 수 있습니다.
shopt -s globstar dotglob failglob
cp -b -t ~/1/ ./**/themes.txt
in을 사용하면 일치하는 이름이 없으면 failglob
명령이 정상적으로 실패합니다 (패턴이 이름과 일치하지 않으면 쉘은 명령을 실행하려고 시도하지도 않습니다).nullglob
위 명령은 일치하는 이름이 실제로 일반 파일인지 여부를 테스트하지 않습니다(디렉토리, 심볼릭 링크 또는 기타 비정규 파일일 수 있음). 이를 위해 다음을 사용할 수 있습니다.
shopt -s globstar
shopt -s nullglob dotglob
for pathname in ./**/themes.txt; do
if [ -f "$pathname" ] && [ ! -L "$pathname" ]; then
cp -b "$pathname" ~/1/
fi
done
이는 일반 파일만 복사하고 비정규 파일과 일반 파일에 대한 심볼릭 링크를 방지합니다.
그걸로 find
당신은해야합니다
find . -name themes.txt -type f -exec cp -b -t ~/1/ {} +
즉, 현재 디렉터리나 다음 디렉터리의 어느 곳에서든 가능한 한 cp -b -t ~/1/
많은 일반 파일을 한 번에 호출합니다. themes.txt
이것의 장점은 cp
통화 횟수를 최대한 줄일 수 있다는 것입니다.