Filename is too long
- DEV COMMON
- 2022. 12. 11.
윈도우 의 파일들을 대량으로 맥 쪽으로 옮기려하면 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' 카테고리의 다른 글
UX 라이팅 (4) | 2024.09.23 |
---|---|
leetcode 알고리즘 자료구조 토픽 전체 (2) | 2024.09.10 |
임시 이슈 (3) | 2022.06.26 |
Docker 연습 (0) | 2022.06.26 |
rank (order) in database (0) | 2022.03.26 |