Filename is too long

반응형

 

윈도우 의 파일들을 대량으로 맥 쪽으로 옮기려하면 filename is too long 오류가 뜰 가능성이 매우 높다.

 

255 characters 를 넘는 파일명의 경우 맥에서는 허용이 되지 않고 그래서 아예 Finder 에서는 보이지 조차 않는다.

 

콘솔에서는 ls 해보면 나오는데 이런 파일들의 이름을 find 명령어로 찾아서 mv 명령으로 이름 바꾸기 같은 것을 시도하려해도

 

애초에 os 단에서 이런 파일들을 mv 명령어 조차 먹지 않도록 그래서 filename too long 이 뜨도록 되어 있다.

 

맥에서 이를 처리할 수 있는 방법은 없고 Finder 에서는 아예 파일이 보이지 조차 않지만 디렉토리를 통째로 옮기려하면

 

해당 파일 자체는 있으므로 filename too long 오류 또는 한글로는

‘xxx’ 항목의 이름이 너무 길거나 대상 볼륨에서 유효하지 않은 문자를 포함하기 때문에 복사할 수 없습니다.

이런 오류를 내뱉는다.

 

Finder 에서는 보이지 않기 때문에 폴더 안에 들어가서 드래그 앤 드랍 할 경우 해당 오류나는 파일들은 보이지 조차 않아서 복사가 가능해진다. 즉 해당 파일들은 빼고 복사가 진행되는 것. 이미 굉장히 많은 파일들이 1TB 가 넘는 자료들이 각 폴더 안에 깊숙히 계속하여 존재할 경우 이를 일일이 찾아서 이름 바꾸는 것도 어렵다.

이러한 이름 바꾸는 작업도 윈도우에서나 가능하다. 맥 에서는 mv 명령어 조차 해당 파일에 먹지 않는다.

 

그래서 추천하는 것은 그냥 ntfs 파일 포맷으로 복사하고 사용. Paragon microsoft ntfs for mac 을 사용하여 맥에서 사용하는 것.

https://hailey-it.tistory.com/4

 

exfat 은 안정성이 좋지 않다고 한다.

 

아래는 삽질한 셸스크립트 몇가지...

 

#/bin/bash

# find . -maxdepth 1 -type f -regextype posix-extended -regex ".{255,}" |
# while read filename
# do
# 	mv -n "$filename" "${filename:0:50}"
# done

# find -E . -maxdepth 1 -type f -regex ".{100,}" |
# while read filename
# do 
#    # file="${filename%%.*}"
#    echo ${filename}
#    ext="${filename##*.}"
#    # echo ${ext}
#    file="$(basename -s .${ext} ${filename})"
#    # echo ${file}
#    truncated="${file:0:100}"
#    # echo ${truncated}
#    mv -n "${filename}" "${truncated}"."${ext}"
# 	#mv -n "$filename" "${filename:0:255}"
# done

# find -E . -maxdepth 1 -type f -regex ".{100,}" |
# while read filename
# do 
#    # file="${filename%%.*}"
#    echo ${filename}
#    ext="${filename##*.}"
#    # echo ${ext}
#    file="$(basename -s .${ext} ${filename})"
#    # echo ${file}
#    truncated="${file:0:100}"
#    # echo ${truncated}
#    mv -n "${filename}" "${truncated}"."${ext}"
# 	#mv -n "$filename" "${filename:0:255}"
# done





# find -E . -maxdepth 100 -type f -regex ".{1000,}" |
# while read filename
# do 
#    mv -n "${filename}" "${filename}"
# done



# find -E . -maxdepth 100 -type f |
# while read filename
# do
#    ext="${filename##*.}"
#    file="$(basename -s .${ext} ${filename})"
#    mv -n "${filename}" "${file//[^[:alnum:]_-]/}.${ext}"
# done



find -E . -maxdepth 100 -type f |
while read filename
do
   ext="${filename##*.}"
   file="$(basename -s .${ext} ${filename})"
   mv -n "${filename}" "${file//[^[:alnum:]_-]/}.${ext}"
done



# find /Users/mac/Documents/ttt -type f | \
# while read filename
# do file="${filename%%.*}"
#    ext="${filename##*.}"
#    if [[ "${#file}" -gt 30 ]]; then
# 	truncated=$(expr $file 1 30)
# 	mv "${filename}" "${truncated}"."${ext}"
#    fi
# done

# find /Users/mac/Documents/ttt -type f | \
# while read filename
# do mName24=`echo ${filename} | cut -c1-24`
#    echo ${filename} | cut -c1-24
#    mExt=`echo ${filename} | sed 's/.*\(\..*\)/\1/'`
#    echo ${filename} | sed 's/.*\(\..*\)/\1/'
#    m24PlusExt=${filename}${mExt}
#    echo ${m24PlusExt}
# done

# mName24=`echo ${mFullName} | cut -c1-24`
# echo ${mFullName} | cut -c1-24
# mExt=`echo ${mFullName} | sed 's/.*\(\..*\)/\1/'`
# echo ${mFullName} | sed 's/.*\(\..*\)/\1/'
# m24PlusExt=${mName24}${mExt}

 

#! /bin/bash

echo "Enter a String"
# Taking input from user
read text

# Counting words
word=$(echo -n "$text" | wc -w)
# Counting characters
char=$(echo -n "$text" | wc -c)

# Counting Number of white spaces (Here,specificly " ")
# sed "s/ change this to whitespace//g"
space=$(expr length "$text" - length `echo "$text" | sed "s/ //g"`)

# Counting special characters
special=$(expr length "${text//[^\~!@#$&*()]/}")

# Output
echo "Number of Words = $word"
echo "Number of Characters = $char"
echo "Number of White Spaces = $space"
echo "Number of Special symbols = $special"

 

 

반응형

'DEV COMMON' 카테고리의 다른 글

임시 이슈  (0) 2022.06.26
Docker 연습  (0) 2022.06.26
rank (order) in database  (0) 2022.03.26
GraphQL 은 문제가 있다... 마음에 들지 않는다...  (0) 2022.03.25
나의링크 삭제 항목 2022-03-23  (0) 2022.03.23

댓글

Designed by JB FACTORY