2014-02-15 3 views
0

rename 명령을 사용하여 일부 파일 및 폴더의 이름을 바꾸려고 시도한 적이 있습니다.Linux 이름 바꾸기 실수 복구

이제는 모든 파일과 폴더가로 시작하는 상태입니다. (나는 점을 의미한다.) 리눅스는 숨겨진 파일 마커가된다.

폴더에서 mv 명령을 사용하려고 시도했지만 이제는 cifsXX 파일이 많이 생성되어 폴더의 내용이 사라졌습니다. 이 경우 중요한 폴더가 아니기 때문에 걱정하지 않으므로 수정하지 않으려 고합니다.

그래서 아무도 내가 가지고 있지 않은 상태로 롤백하는 마법 마술을 알지 못합니다. 내 모든 파일 앞?

내가 실수로 만든 파일과 폴더가 100 개 더 많아서 안전하고 적어도 반 자동화가되어있는 솔루션을 찾고 싶습니다. 따라서 모든 파일과 폴더에 대해이 작업을 수행 할 필요가 없습니다. 하나씩.

+0

'의 LS를 사용하여 DOIT 수 있습니다. 그리고'mv .dotfile dotfile'은 그것의 이름을 unotted 버전으로 다시 바꿉니다. (여분의 안전을 위해'mv -i .dotfile dotfile'을 사용하십시오.) – wildplasser

답변

2
당신의 .* 파일을 통해 당신은 루프 수

도트를 삭제하는 이름을 바꿉니다 :

for file in .* 
do 
    mv "$file" "${file#*.}" 
done 

${var#*.}는이 점을 주도하지 않고 파일 이름을 가져옵니다 최초의 점까지,이 경우에, 그래서 모든 것을 제거합니다.

$ d="bbb.cc" 
$ echo ${d#*.} 
cc 

$ d=".cc" 
$ echo ${d#*.} 
cc 
+0

당신은 스타 남자입니다.이 사람은 매력처럼 작동했습니다! – Georges

+0

좋은 것을 읽으십시오. @Georges :) 당신이 여기 새로 왔으니 문제가 이미 해결 된 경우 대답을 표시하는 것을 잊지 마십시오. 답변 옆에있는 체크 표시를 클릭하여 빈에서 녹색으로 토글 할 수 있습니다. [도움말 센터> 묻기] (http : // stackoverflow.co.kr/helpcenter/someone-answers) 의심되는 점이 있으면 알려 주시기 바랍니다. – fedorqui

+0

그래, 내가 그것을 일찍 표시하려고했지만 분명히 조금 기다려야했다. 다시 한 번 감사드립니다! – Georges

0

너는 rename을 좋아하기 때문에 문제를 해결하는 데 사용할 수 있습니다.

rename . '' .* 

참고 : 두 번째 인수는 실제로 빈 문자열이며 따옴표가 필요하거나 인수가 존재하지 않습니다. *이 숨김 파일로 확장되지 않기 때문에 .*도 필요합니다.

아아, 그게 ... 특수 디렉토리 항목의 이름을 바꾸려고 시도하기 때문에 작동하지 않으며 실패하고 중단됩니다. 그것은 ... 항목을 실패합니다

for x in .* 
do 
rename . '' "$x" 
done 

을하지만 계속됩니다

이 대신 작동합니다. 당신이 그것을하고 싶은 경우

재귀 대신 find를 사용할 수 있습니다

find . -name ".*" -exec rename . '' {} \; 

당신이 쉘 패턴을 (find을 처리합니다) 확장 싶지 않기 때문에 find".*"을 인용해야합니다.

0

당신은 -a`이 dotfiles 표시됩니다 쉘 스크립트를

#!/bin/bash 
for i in .* 
do 
mv $i `echo $i | sed 's/\.//g'` 
done