C 쉘 스크립트: 디렉토리를 찾고 이름 바꾸기

C 쉘 스크립트: 디렉토리를 찾고 이름 바꾸기

저는 아직 이 쉘 스크립트를 처음 접했습니다. 나에게 주어진 임무가 있는데 그것을 실행하는 데 어려움을 겪고 있습니다. 임무는 ddmmyy를 기반으로 하는 많은 디렉토리를 가지고 있다는 것입니다.

03Mar2014  08Aug2013  11Jan2015  16Jan2014  22Feb2014  26Mar2014  
03Nov2013  08Jan2014  11Jul2013  16Jul2013  22Jul2013  26Oct2014  
03Oct2013  08Jan2015  11Nov2014  16May2014  22Mar2014  26Sep2013  

작업은 mmyy 디렉터리를 만드는 것입니다.

지금까지 내 코드는

foreach file(`find . -type d | awk -F/ 'NF == 3'`) 
echo $file
set newmove = `echo $file | cut -c 1-2,5-`
echo $newmove
mv $file $newmove

output:
for find . -type d | awk -F/ 'NF == 3':
./24Jan2015/W51A
`echo $file | cut -c 1-2,5-`
./Jan2015/W51A
mv $file $newmove
mv: cannot rename ./24Jan2015/W51A to   ./Jan2015/W51A: No such file or directory

하지만 스크립트가 작동하지 않습니다. 이 작업을 수행하는 방법을 알고 있습니까?

답변1

첫 번째 참고 사항: 귀하의 예에서는 파일 ddmmyy형식이 가 아닌 (동일한 디렉터리에 있음)로 표시됩니다 dd/mm/yy. 그렇다면 해당 find . -type d | awk -F/ 'NF == 3'파일을 찾을 수 없으므로 foreach빈 인수 목록에 대해 불평하게 됩니다.

> foreach ( '' )
foreach: Variable name must begin with a letter.

두 번째 참고 사항: 파일을 찾았다고 가정하면 명령문은 cut올바른 해당 대상 디렉터리를 얻지 못합니다(어떤 파일 이름 형식 ddmmyy이나 dd/mm/yy올바른 파일 이름 형식에 관계없이).

> echo '08Aug2013' | cut -c 1-2,5-
08g2013
> echo '08/Aug/2013' | cut -c 1-2,5-
08ug/2013

귀하의 echo진술은 귀하의 스크립트가 해야 할 일을 하고 있지 않다는 점을 지적해야 합니다.

각 코드 조각을 개별적으로 시도하여 원하는 효과가 나타나는지 확인하는 것이 스크립트 디버깅을 위한 좋은 시작점이 되는 경우가 많습니다. 처음부터 시작하여 find . -type d명령문에 올바른/예상된 스크립트 작업이 표시 move될 때까지 .echo

관련 정보