다른 디렉터리에도 있는 한 디렉터리의 파일 삭제

다른 디렉터리에도 있는 한 디렉터리의 파일 삭제

다음을 사용하여 디렉토리를 복사했습니다.

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

설명하다:

  1. PATH_DIR1의 모든 파일 이름을 나열합니다.

PATH_DIR1 -type f -exec 기본 이름 '{}' ';' 찾기

  1. PATH_DIR2의 기존 파일을 사용하여 이전 목록 필터링(교차하는 데이터 찾기)

xargs printf -- 'PATH_DIR2/%s\n'

  1. 필터링된 결과 삭제

xargs rm

관련 정보