UNIX: 여러 하위 디렉터리의 모든 숨겨진 파일을 표시되도록 변경하는 방법

UNIX: 여러 하위 디렉터리의 모든 숨겨진 파일을 표시되도록 변경하는 방법

내 디렉토리에는 수백 개의 하위 디렉토리가 있는데 모두 숨겨진 파일이 포함되어 있으므로 해당 하위 디렉토리를 표시하려면 시작 부분에 있는 마침표를 제거해야 합니다. 각 디렉토리로 이동하여 표시되도록 변경하는 명령을 찾았지만 한 디렉토리부터 명령이 작동하도록 만드는 방법을 알아야 합니다.

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#.}하고 초기 지점을 제거합니다.$1sh -c

답변4

find . -type f -name .\* -exec rename -n 's/\.//;' {} +

관련 정보