디렉토리에 특정 문자열이 들어 있으면 디렉토리 및 파일 이동 (디렉토리 이름에서 문자열 삭제)


0

더 나은 설명을 위해 편집 됨.

그래서 디렉토리를 스캔하고, 디렉토리 이름 끝에 --import-me가 들어있는 하위 디렉토리를 찾고, 포함 된 모든 파일로 새 디렉토리로 이동하고, --import-me 문자열없이 dir의 이름을 바꿉니다.

cd $some-dir
for f in `find . -name "*--import-me" `
do
rename=${f%--import-me}
echo mv $f "some-other-dir"/"$rename"
done

나는 얻다

mv ./iZombie /some-other-dir/./iZombie
mv (2015)--import-me /some-other-dir/(2015)

나는 그것이 나에게 줄 것을 기대한다.

mv ./some-other-dir/iZombie (2015)

1
너는 필요 없어. echo | sed, 그냥 ${file%--import-me} 충분하다. 또한 오타도 있습니다. 그 이외에, 당신은 정말로 당신의 문제가 무엇인지 말하지 않았습니다. 당신은 성명을 발표했습니다.
4ae1e1

1
정의 "작동하지 않는다". 이것이 질문의 가장 중요한 부분입니다.
4ae1e1

답변:


0

당신의보기에서 *--import-me 디렉토리는 현재 디렉토리에만 존재합니다. 그렇다면이 한 줄을 사용할 수 있습니다 :

find . -type d -name "*--import-me" -exec sh -c 'mv $0 some-dir/${0%--import-me}' {} \;

그렇지 않으면 중첩 디렉토리가있는 경우이 디렉토리를 사용해야하며, / 대상 디렉토리 ( some-dir ) 당신은 그들을 탈출해야합니다 \/:

find . -type d -name "*--import-me" -exec sh -c 'mv $0 `echo $0| sed "s/.*\/\(.*\)--import-me/some-dir\/\1/g"`' {} \;

이런 식으로 일할 수도 있지만 ... mv "$dldDir"/*_import-me "$libDir" mv "$libDir"/*_import-me "$libDir"/${0%_import-me}
jasenmichael

0

그래서 이것을 작동시킬 수없는 것 같습니다. 파일 이름은 항상 공백으로 나뉘어져서 mv 두 개의 별도 dir을 시도합니다. 이 스크립트에서 실행되고, 이상적으로 "* _import-me", 이름 바꾸기 및 한 명령에서 이동 포함하는 디렉터리를 찾을 수 있지만 지금은 _import-me, 포함하는 dirs ($ dldDir $ libDir) 이동하려고합니다. libDir에있는 dir의 이름을 바꾸십시오 (_import-me 문자열 제거).

mv "$dldDir"/*_import-me "$libDir"
cd $libDir
find . -type d -name "*_import-me" -exec sh -c 'mv $0 `echo $0| sed "s/.*\/\(.*\)_import-me/"$libDir"\/\1/g"`' {} \;

그래서 첫 번째 MV가 작동하고 ls $ dldDir이 나에게 준다.

~# ls -1 $dldDir
Brother Bear 2 (2006)_import-me
Terminator Salvation (2009)_import-me

하지만 두 번째 mv ($ libDir에서 _import-me 제거)

mv: target ‘(2009)_import-me’ is not a directory
mv: target ‘(2006)_import-me’ is not a directory
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.