루트 디렉터리에서 시작하여 트리를 재귀적으로 탐색하고 싶습니다. 디렉터리에 .picasa.ini라는 파일이 하나만 있는 경우 해당 디렉터리와 파일을 삭제하고 싶습니다.
Find 명령으로 복잡한 검색을 많이 할 수 있는 것처럼 보이지만 이러한 유형의 조건을 기반으로 뭔가를 수행하는 것이 가능한지는 모르겠습니다.
저는 Windows 컴퓨터를 사용하고 있지만 다양한 명령줄 도구를 제공하는 cygwin에 액세스할 수 있습니다.
답변1
find
단일 명령으로 수행 할 수 있는지는 확실하지 않지만 간단한 bash 스크립트를 사용하면 확실히 수행할 수 있습니다. 방금 Cygwin에서 이것을 테스트했는데 예상대로 작동합니다. ROOT_DIR
이 검색을 수행하려는 파일 시스템의 루트 디렉터리로 변경해야 합니다 (예: /cygdrive/d/
D 드라이브 검색).
일반적인 아이디어는 다음과 같습니다. .picasa.ini
트리에서 이름이 지정된 모든 파일을 찾습니다. 각 파일에 대해 해당 디렉터리를 살펴보고 다른 파일이 있는지 확인하세요. 그렇지 않은 경우 디렉터리를 삭제합니다. (둘러싸는 큰따옴표는 $dir
공백이 포함된 디렉터리를 제거합니다.) 그렇지 않으면 계속합니다.
#!/bin/bash
ROOT_DIR=/
find "$ROOT_DIR" -type f -name '.picasa.ini' | while read file; do
dir=$(dirname "$file")
filecount=$(ls -1A "$dir" | wc -l)
if (( filecount == 1 )); then
rm -rv "$dir"
fi
done