내 디렉토리에는 수백 개의 하위 디렉토리가 있는데 모두 숨겨진 파일이 포함되어 있으므로 해당 하위 디렉토리를 표시하려면 시작 부분에 있는 마침표를 제거해야 합니다. 각 디렉토리로 이동하여 표시되도록 변경하는 명령을 찾았지만 한 디렉토리부터 명령이 작동하도록 만드는 방법을 알아야 합니다.
rename 's/\.//;' .*
답변1
GNU 사용 find
:
find /some/path -type f -name '.*' -execdir sh -c 'mv -i "$0" "./${0#./.}"' {} \;
펄 사용하기 rename
:
find /some/path -type f -name '.*' -exec prename -i -n 's!.*/\K\.!!' {} +
-n
(결과가 만족스러우면 제거하세요).
답변2
모든 문제를 해결하는 라인이 드디어 답을 찾았네요
find -mindepth 1 -depth -exec rename -n 's{/\.([^\/]*$)}{/$1}' {} +
답변3
간단한 쉘 스크립트와 함께 사용하면 find
기존 파일을 덮어쓰는지 확인하고 이름을 바꿀 수 있습니다.
find . -type f -name '.*' \
-execdir sh -c '[ ! -e "${1#.}" ] && mv "$1" "${1#.}"' sh {} ';'
이 -execdir
옵션은 찾은 이름의 상위 디렉터리에서 인수를 실행하며 {}
찾은 이름(경로가 없는 이름)의 기본 이름이 됩니다. 이 옵션은 표준의 광범위한 구현에 대한 확장입니다 find
.
스크립트 sh -c
는 필요한 이름이 아직 사용되지 않았는지 확인한 다음 파일 이름을 바꿉니다.
인수 대체는 (파일 이름인 스크립트의 첫 번째 명령줄 인수) 값을 사용 ${1#.}
하고 초기 지점을 제거합니다.$1
sh -c
답변4
find . -type f -name .\* -exec rename -n 's/\.//;' {} +