다음을 사용하여 디렉토리를 복사했습니다.
cp -r dir/ ../../
별 생각 없이 위의 디렉터리에 내용을 복사한 dir
것이 아니라 내용을 복사했다는 사실을 깨달았습니다 . dir
이제 제대로 다시 실행할 수 있도록 엉망인 파일을 삭제해야 합니다 cp
. 실수로 복사한 파일이 특정 내용과 일치하지 않는 경우 어떻게 모두 삭제하나요?
답변1
좋아, 이건 기본적으로 똑같아클라파우치우스의 대답. ( cp
기존 파일 중 일부를 덮어쓸 경우 발생한 손상은 복구되지 않습니다.)
소스 디렉토리( )에 있다고 가정합니다 dir
. 이 명령은 다음과 같습니다.
find . -type f -exec echo '{}' ';'
디렉토리에 있는 모든 파일을 (재귀적으로) 나열합니다 dir
( 와 유사 -print
). 이 -type f
옵션을 사용하면 하위 디렉터리가 나열되지 않습니다.
따라서 다음을 사용하는 경우:
find dir -type f -exec echo '../../../{}' ';'
그러면 대상 디렉터리에 해당 파일(사본)이 나열됩니다.
이제 목록이 정확하면 다음을 사용하여 복사본을 삭제할 수 있습니다.
find dir -type f -exec rm -- '../../../{}' ';'
나머지 빈 디렉토리를 정리하는 것에 관해서는 cp
...글쎄... 에서 가져온 것입니다.
답변2
find
와 함께 사용됩니다 -exec
. 다음과 같이 전에 테스트 하는 것이 좋습니다 ls
.
find . -name "*" -exec ls ../../{} \;
답변3
다음 코드는 정식 버전 스크립트를 배치한 포함된 개행 문자가 포함된 파일 이름을 처리합니다..ubuntu 붙여넣기. 존재 여부와 일치하는 크기를 확인합니다. 테스트 데이터를 생성하는 코드도 여기에 포함되어 있습니다.
# This lists the original fully-qualified filename,
# and its would-be counterpart (assuming it exists)
unset a i
while IFS= read -r -d $'\0' relf; do
printf "%s\n$s" "$PWD${relf:1}" "$(dirname "$(dirname "$PWD")")${relf:1}"
done < <(find . -type f \! -name '.' -name '*' -print0)
다음은 한 파일이 누락되고 다른 파일의 파일 크기가 원본과 다른 전체 버전(위와 같음)의 출력 예입니다.
WARNING -----
NOT in target ./file1
ok --------
sizes match ./c/file4-in-subdir
WARNING ------
size mis-match ./file3 is triple-spaced
ok --------
sizes match ./file2
has newline!
답변4
PATH_DIR2에서 PATH_DIR1까지의 기존 파일을 삭제하려고 합니다.
find PATH_DIR1 -type f -exec basename '{}' ';' | xargs printf -- 'PATH_DIR2/%s\n' | xargs rm
설명하다:
- PATH_DIR1의 모든 파일 이름을 나열합니다.
PATH_DIR1 -type f -exec 기본 이름 '{}' ';' 찾기
- PATH_DIR2의 기존 파일을 사용하여 이전 목록 필터링(교차하는 데이터 찾기)
xargs printf -- 'PATH_DIR2/%s\n'
- 필터링된 결과 삭제
xargs rm