내 Samba 서버의 디렉터리/하위 디렉터리에 특수 문자가 포함된 파일이 많이 있습니다. 문제는 Windows를 사용하여 파일을 보려고 하면 파일(특수 문자 포함)이 표시되지 않는다는 것입니다. 그래서 특수 문자로 파일 이름을 변경하는 명령(아래)을 작성했지만 이름이 바뀐 파일을 다시 디렉터리/하위 디렉터리에 넣는 것은 작동하지 않습니다.
find . -type f -exec rename -v 's/[^a-zA-Z0-9 &](?=[^.]*\.)/_/g' '{}' \;
하단에는 이름을 바꿀 파일이 포함된 현재 디렉터리를 게시했습니다.
./dir 1/fil[special char]e3.jpg
./dir 1/another dir2/m[special char]r.file1.txt
./dir 1/another dir2/file[special char]2.doc
./dir 3/next dir4/dir 5/fi[special char]le5.xml
./file 4.zip
예상됨 - 위 명령을 사용한 후(디렉터리/하위 디렉토리의 파일):
./dir 1/fil_e 3.jpg
./dir 1/another dir2/m_r_file1.txt
./dir 1/another dir2/file_2.doc
./dir 3/next dir4/dir 5/fi_le5.xml
./file 4.zip
현실 - 명령을 실행하는 동일한 폴더에 있는 파일:
__dir 1_fil_e 3.jpg
__dir 1_another dir 2_m_r_file1.txt
__dir 1_another dir 2_file_2.doc
__dir 3_next dir4_dir 5_fi_le5.xml
__file 4.zip
두 가지 질문이 있습니다.
- 파일 이름에서 경로 이름을 제외하는 방법은 무엇입니까?
- 파일을 디렉토리에 넣는 방법은 무엇입니까?
답변1
그렇다면 대신 -execdir
에 옵션을 사용하십시오 .find
-exec
-exec
각 경로를 인수로 사용하여 루트에서 명령을 실행합니다.-execdir
각 파일 이름을 인수로 사용하여 대상 디렉터리에서 명령을 실행합니다.
그러므로,
find . -type f -execdir rename -v 's/[^a-zA-Z0-9 &](?=[^.]*\.)/_/g' '{}' \;
이 답변이 게시되었으므로 rename
질문과 이 답변에 참조된 명령이 대안으로 대체되었습니다 rename [options] expression replacement file…
. 여기에 표시된 콘텐츠는 rename
귀하의 시스템에서 사용 가능할 수도 있습니다 prename
. 그렇지 않다면 할 수 있습니다다운로드그리고 설치해 보세요이 레시피를 사용해 보세요.