저는 우분투를 사용하고 있으며 dropbox
. 문제는 내 사진 폴더에 하드 링크가 많아서 동기화 문제가 있다는 것입니다.
사진을 잃지 않고 간단한 명령 하나로 어떻게 모두 삭제할 수 있나요? 단일 파일에 대해 다음 명령을 찾았습니다.
find /home -xdev -samefile "filename" | xargs rm
하지만 모든 파일에 대해 이 작업을 수행하는 방법을 모르겠습니다.
미리 감사드립니다
내 파일 시스템에 대한 정보:
Filesystem Type Size Used Avail Use% Mounted on
udev devtmpfs 7,7G 0 7,7G 0% /dev
tmpfs tmpfs 1,6G 2,4M 1,6G 1% /run
/dev/nvme0n1p3 ext4 435G 203G 211G 50% /
tmpfs tmpfs 7,7G 756M 7,0G 10% /dev/shm
tmpfs tmpfs 5,0M 4,0K 5,0M 1% /run/lock
답변1
파일에 여러 개의 하드 링크가 있는 한 해당 파일을 삭제할 수 있으며 마지막 하드 링크가 삭제되면 데이터가 삭제됩니다. 링크 수는 (*) 를 사용하여 검색할 수 있으므로 stat -c '%h' {file}
다음과 같이 여러 하드 링크가 있는 모든 파일을 삭제할 수 있습니다.
for file in *
do
links=$(stat -c '%h' "$file")
[[ -f "$file" ]] && [[ $links -gt 1 ]] && rm "$file"
done
그들이 말했듯이,결국엔 하나만 남게 되겠죠, 디렉터리 처리 순서, 알파벳 순서 등에 따라 생존자가 마지막으로 확인됩니다.
(*) 이는 의 출력에도 나타나지만 ls -l
구문 분석하기가 더 어렵습니다...
답변2
당신은 삭제할 수 있습니다"추가의"모든 문서의 사본은 다음과 같습니다.
find /home -xdev -type f -links +1 -delete
그러나 이러한 추가 복사본 중 일부는 외부 위치에 하드 링크되어 있을 수 있다는 점에 유의해야 합니다./home
(그리고 길을 잃은 것처럼 보일 수도 있습니다).
이것-links +1
여러 개의 하드 링크 find
( )가 있는 파일만 선택함을 나타냅니다.-type f
(더 많은 작업을 통해) find
각 파일의 inode 값을 인쇄하고 결과를 정렬하고 (사용 awk
) 을 통해 삭제할 파일 목록을 작성할 수 있지만 xargs
그렇게 하면 특수 문자(공백 포함)가 있는 파일을 만나게 됩니다. 이름. 하지만 이것은 파일이 외부에 링크될 때 놀라움을 없애는 방법입니다./home
.
답변3
Unix/Linux/MacOS에서 디렉토리의 파일 이름은 디스크의 구조인 inode(간접 노드)를 나타냅니다.진짜파일입니다. 이러한 이름과 인덱스 노드의 연관을 호출합니다.하드 링크그리고소프트 링크이는 본질적으로 파일을 찾을 수 있는 이름이 포함된 파일입니다. 링크하려는 파일에 대한 경로의 일부를 삭제하거나 이름을 바꾸면 소프트 링크가 깨질 수 있지만, 하나의 하드 링크 이름을 바꾸거나 이동해도 다른 링크에는 전혀 영향을 미치지 않습니다.
따라서 "원본 파일"은 존재하지 않으며,모두하드 링크는 정확히 동일한 상태를 갖습니다. inode는 파일을 참조하는 하드 링크 수를 기록합니다( ls -l
이 숫자를 두 번째 필드로 표시합니다. 파일의 경우 일반적으로 1(단 하나의 링크)이고 디렉터리의 경우 일반적으로 2(상위 링크 및 " ."의 링크) 디렉터리 자체입니다. ; 하위 디렉터리가 있는 경우 각 하위 디렉터리는 ".."으로 상위 디렉터리를 참조하므로 개수가 증가합니다. 링크 수가 0에 도달하면 파일이 사용하는 공간이 회수됩니다.