
안녕하세요. 모든 파일에서 슬래시를 모두 제거하고 싶지만 기본 디렉터리의 모든 디렉터리에 대해 이 작업을 반복적으로 수행합니다.
재귀적으로 작동하지 않는 이 스크립트를 어떻게 수정해야 합니까?
for f in "$1"/*; do
dir="$(dirname "$f")"
file="$(basename "$f")"
mv -- "$f" "${dir}/${file//[^_-0-9A-Za-z.]}"
done
아니면 파일 이름의 슬래시만 바꾸고 싶은데 기본 폴더의 모든 하위 폴더에 대해 이렇게 하는 것이 더 낫습니까?
맥스에게 인사하다
답변1
BSD 계층에서 슬래시는 경로 구분 기호입니다. 슬래시가 포함된 파일 이름을 발견하면 커널은 슬래시-를 /
콜론-으로 변환합니다 :
. 따라서 Finder 애플리케이션의 파일 이름은 다음과 같을 수 있지만 foo/bar
BSD 계층에서는 foo:bar
.
따라서 디렉토리 트리를 탐색하려면 해당 이름이 find
포함된 파일을 찾으십시오 . :
그런 다음 인라인 스크립트를 사용하여 -execdir
파일 이름에서 콜론(파인더 응용 프로그램의 슬래시)을 제거합니다.
find . -type f -name '*:*' -execdir bash -c ' for file
do
echo mv -- "${file}" "${file//:}"
done' sh {} \;
mv
명령과 피연산자 만 나열됩니다 . 출력 결과가 원하는 결과를 제공할 것이라고 생각되면 echo
.