저는 아직 이 쉘 스크립트를 처음 접했습니다. 나에게 주어진 임무가 있는데 그것을 실행하는 데 어려움을 겪고 있습니다. 임무는 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