2014-10-17 4 views
1

내 디렉토리의 모든 파일을 개별적으로 새 디렉토리 phonex로 이동하고 동시에 phonex.txt의 이름을 바꾸려고합니다. 예.awk 시스템 구문 오류 발생

phone1.txt in directory phone1 
phone2.txt in directory phone2 
phone3.txt in directory phone3. 

내가 AWK에 초보자 해요,하지만 난 디렉토리를 작성 관리해야하지만, 나는 잘 이름을 얻을 수 없습니다

1.txt, 2.txt, jim.txt

이된다. 많이

ls|xargs -n1|awk ' {i++;system("mkdir phone"i);system("mv "$0" phone”i ”.txt -t phone"i)}' 

하는 오류를 : 나는 시도

mv: cannot stat `phone”i': No such file or directory 

과 :

ls|xargs -n1|awk ' {i++;system("mkdir phone"i);system("mv "$0" phone”i ”/phone"i”.txt”)}' 

오류 :

awk: 1: unexpected character 0xe2 

xargs를 :/빈/에코 : 신호 13에 의해 종료 됨누구나 제가 도와 드릴까요? 티아!

+2

로 설정되어있는 경우에는이 작업을 수행하기 전에 제로 x=0 X를 설정할 수 있습니다. –

+1

을에서 일반적으로, 특히 초보자 인 경우'system'의 사용은 매우 위험합니다. 잘못된 것을 만든 구문 적으로 올바른 프로그램을 만들었다면,'system'은 행복 할 것입니다, 예를 들어 모든 파일을 파일 시스템 ... (내가이 프로그램을 사용하는 경우에 해당 함을 의미하지는 않는다.) 가능성을 논의하고있다. 나는 stdout에 명령을 인쇄하고 프로그램을 적용하기 전에 프로그램의 출력을 검사하는 것을 선호한다. 내가 확신 할 때만 내 작업의 정확성 (1) 출력을'| sh "또는 (2)'print() '를'system (...)'으로 바꾼다. – gboffi

+0

이제 좀 더 구체적인 설명을 들자면, 여러분은 ** folder1에'file1','folder2'에'file2' 등을 넣어 ** 정보를 복제하는 것입니다. 때로는 중복성이 좋은 엔지니어링이고 때로는 낭비입니다. – gboffi

답변

1

숫자가 증가하는 경우.
기타 Tom Fenech의 길은 갈 길입니다!

for i in *.txt;do d=phone$((++X));mkdir "$d"; mv "$i" "$d/$d.txt";done 

또한 당신은` '대신`의` "`사용하는 간단한 경우처럼 보이는이 이미 뭔가 다른

+0

댓글 정리 :) @TomFenech는 디렉토리 생성이 괜찮은 경우에만 복사하려고 시도하지만 (다른 부작용도있을 수 있음) – Tensibai

+0

감사합니다. – schoon

3

: awk으로의 파이프 ls은이 시나리오에서는 완전히 불필요합니다. 당신이 할하려고하는 것은 단순한 루프를 사용하여 수행 할 수 있습니다 : 쉘에 따라

for f in *.txt; do 
    i=$((i+1)) 
    dir="phone$i" 
    mkdir "$dir" && mv "$f" "$dir/$dir.txt" 
done 

$i의 증가는 다른 방식으로 수행 (같은 bash는 ((++i)))하지만,이 방법은 POSIX를 준수 할 수 있습니다 현대 쉘에서 작동해야합니다.

그런데 원래 오류가 발생한 이유는 셸이 이해할 수없는 중괄호 을 사용하고 있기 때문입니다. 셸에서는 항상 '" 두 개만 사용해야합니다.