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.

2番目の注意:ファイルが見つかったと仮定すると、ステートメントは正しい適切なターゲット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

おすすめ記事