The UNIX and Linux Forums  


Go Back   UNIXおよびLinuxフォーラム > トップフォーラム > シェルプログラミングとスクリプティング
Googleのunix.com



シェルプログラミングとスクリプティング KSH 、 CSH 、 shに、 bashの、はPerl 、 PHPは、削除するsed 、 Awkの、他のシェルスクリプトやシェルスクリプト言語についての質問の投稿はこちら。

その他のUNIXおよびLinuxフォーラムトピックは参考にすること
スレッド スレッドスターター フォーラム 返信 最後の投稿
メール機能の問題 jwholey シェルプログラミングとスクリプティング 4 2008年5月1日 12:21午後
スクリプトのディレクトリを再帰的な問題のためにしてくださいヘルプ robertmcol シェルプログラミングとスクリプティング 2 2008年4月27日 08:00午後
関数問題とCoreDump ジプシー シェルプログラミングとスクリプティング 8 2008年2月19日 06:37午後
再帰関数 bebop1111116 高レベルのプログラミング 1 2006年10月30日 08:12午後
PERLを関数の問題 avadhani シェルプログラミングとスクリプティング 2 2005年6月15日 05:18午前

Closed Thread
English Japanese Spanish French German Portuguese Italian Dutch Swedish Russian Norwegian Hungarian Hebrew Danish Bulgarian Greek を搭載 Powered by Google
 
LinkBack スレッドツール このスレッドを検索 スレッドを評価 表示モード
  #1固定リンク)  
Old 2007年2月3日
マル malle is offline
登録ユーザー
  
 

参加日: 2007年1月
場所:コルカタ
投稿: 10
問題を再帰的に機能

こんにちはすべて、

私はツリーのディレクトリ構造の単一のディレクトリにすべてのファイルを移動する必要があります。 Inorderファイルはディレクトリから、私はファイル名には、ディレクトリの名前を追加する必要がありますが知っている。これは私がこれを次のようにされている再帰的な関数を書いた
---------------------------------------------
datamover ( )

CDの1ドル
# OLD_DIR \u003d $ 2
私は*
する
[ - Dの$私]
それから
TMP_DIR \u003d $私
datamover $ TMP_DIR
私は$エコー
その他の
ミュージックビデオ$私.. / $ 1_ $私

[場合、 - fを$ 1 / ]
それから
エコーはまだいくつかのファイルが存在
その他の
CDを..
rmdir $ 1
Fiの

Fiの
完了した

-------------------------------------------------- --------------
いつまで私としては、ディレクトリ構造上の同じ実行
DirA - > DirB - >震える- > fileN
- > DirM - > fileO
--- > DirC - > DirP - >ファイラ
- > DirQ - >ファイル

このプログラムの出力を提供している次のように
DirA - > DirB - > DirL_fileN
- > DirM_fileO
--- > DirC - > DirP - >ファイラ
- > DirQ - >ファイル

とデバッグouptutは次のとおりです
-------------------------------------------------- ----
+ディレクトリ名ですDirAエコー
ディレクトリ名DirAです
+ MAIN_DIR \u003d DirA
+ DirA datamover
+ DirAのCD
+ ' [ ' - DのDirB ' ] '
+ TMP_DIR \u003d DirB
+ DirB datamover
+ DirBのCD
+ ' [ ' - Dの震える' ] '
+ TMP_DIR \u003d震える
+震えるdatamover
+震えるのCD
+ ' [ ' - DのfileN ' ] '
+ミュージックビデオfileN .. / DirL_fileN
+ ' [ ' - fを震える/ ' ] '
+ CDの..
+震えるrmdir
+ fileNエコー
fileN
+ ' [ ' - DのDirM ' ] '
+ TMP_DIR \u003d DirM
+ DirM datamover
+ DirMのCD
+ ' [ ' - Dの' fileO ] '
+ミュージックビデオfileO .. / DirM_fileO
+ ' [ ' - fをDirM / ' ] '
+ CDの..
+ DirM rmdir
+ fileOエコー
fileO
+ fileOエコー
fileO
+ ' [ ' - DのDirC ' ] '
+ミュージックビデオDirC .. / DirA_DirC
ミュージックビデオ:できない状態DirC ` ' :そのようなファイルまたはディレクトリ
+ ' [ ' - fをDirA / ' ] '
+ CDの..
+ DirA rmdir
rmdir : ` DirA ' :そのようなファイルまたはディレクトリ
-------------------------------------------------- ------------

誰whtのコードの問題とはどのように修正するために、教えてもらえますか?
私はこのシナリオでは、出力されるよう必要
DirA - > DirB_DirL_fileN
- > DirB_DirM_fileO
- > DirC_DirP_fileR
- > DirC_DirQ_fileS

事前に感謝
  #2固定リンク)  
Old 2007年2月3日
zazzybob's Avatar
zazzybob zazzybob is offline Forum Advisor  
登録ギーク
  
 

参加日: 2003年12月
場所:メルボルン、オーストラリア
投稿数: 2,100
ここでは、単純な出発点....の

コード:
$ find dirA -type f -print | while read filename; do
>    mv ${filename} ./destDir/`echo ${filename} | sed 's!/!_!g'`
> done
$ find dirA -type f -print
$ ls destDir
dirA_dirB_dirE_file_4  dirA_dirC_dirF_dirI_file_7  dirA_dirC_file_2       dirA_dirD_file_3
dirA_dirB_file_1       dirA_dirC_dirF_file_5       dirA_dirD_dirG_file_6

ご覧のように、すべてのファイルからDESTDIRをdirAに移動されます。

次にrmできるだけのRF dirA

乾杯
ZB
  #3固定リンク)  
Old 2007年2月3日
sb008 sb008 is offline Forum Advisor  
登録ユーザー
  
 

参加日: 2007年1月
投稿数:384
引用:
当初の投稿 zazzybob
ここでは、単純な出発点....の

コード:
$ find dirA -type f -print | while read filename; do
>    mv ${filename} ./destDir/`echo ${filename} | sed 's!/!_!g'`
> done
$ find dirA -type f -print
$ ls destDir
dirA_dirB_dirE_file_4  dirA_dirC_dirF_dirI_file_7  dirA_dirC_file_2       dirA_dirD_file_3
dirA_dirB_file_1       dirA_dirC_dirF_file_5       dirA_dirD_dirG_file_6

ご覧のように、すべてのファイルからDESTDIRをdirAに移動されます。

次にrmできるだけのRF dirA


乾杯
ZB
これを行うには、この方法です。

元のスクリプトでは、これが故障した場合
私は*
声明

*この関数の開始時と評価されているファイルは、ディレクトリへのサブディレクトリから移動を予測するものではありません。
  #4固定リンク)  
Old 2007年2月3日
hegemaro hegemaro is offline
登録ユーザー
  
 

参加日: 2006年2月
場所:スケネクタディ、ニューヨーク
投稿数: 134
Arrow

zazzybobのソリューションは、エレガントでシンプルなソリューションです。

再帰関数の中では、 Kornシェルに対応して、そこには2つの点を考慮している。特に彼らがして、これをローカルにする機能を持つ関数の中で定義されている現在の作業ディレクトリを含むすべての変数は、グローバルです。

コード:
typeset FILENAME=/etc/hosts

Function ()
{
    FILENAME=/etc/resolv.conf
    echo $FILENAME
}

echo $FILENAME
Function
echo $FILENAME

生産する

は/ etc / hostsを
/ etc / resolv.confを
/ etc / resolv.confを

しかしばがら、


コード:
typeset FILENAME=/etc/hosts

Function ()
{
    typeset FILENAME

    FILENAME=/etc/resolv.conf
    echo $FILENAME
}

echo $FILENAME
Function
echo $FILENAME

生産する
は/ etc / hostsを
/ etc / resolv.confを
は/ etc / hostsを

変数は、関数は、作業ディレクトリを含めて地域を作るための迅速かつ汚い方法シェルでは独自の機能を、カッコ内の括弧を置くことで、関数を実行することです。この関数は、ディレクトリを含め、その環境にされている独自の機能を呼び出すスクリプトの中で反映されていないが、環境の変更時に電話をかけての独自のコピーを入手します。


コード:
typeset FILENAME=/etc/hosts

Function ()
{ (
    FILENAME=/resolv.conf
    echo $FILENAME
) }

echo $FILENAME
Function
echo $FILENAME

生産する
は/ etc / hostsを
/ etc / resolv.confを
は/ etc / hostsを

編集hegemaroで最終; 2007年2月3日に 10:41午前..
  #5固定リンク)  
Old 2007年2月3日
マル malle is offline
登録ユーザー
  
 

参加日: 2007年1月
場所:コルカタ
投稿: 10
おかげでzazzybob 。このソリューションはファンタスティックだった。

解決策については、もう少しヒントを与えているみんなに感謝する。
Closed Thread

ブックマーク

スレッドツール このスレッドを検索
このスレッドを検索

高度な検索
表示モード このスレッド
このスレッド

投稿ルール
あなた ことができない。 新しいスレッドを投稿
あなた ことができない。 返信の投稿
あなた ことができない。 添付ファイルの投稿
あなた ことができない。 自分の投稿を編集

BBコード なる 〜の上に
スマイリー なる 〜の上に
[イメージ] コードは 〜の上に
HTMLコードは、 オフ
トラックバック なる 〜の上に
ピングバック なる 〜の上に
Refbacks なる 〜の上に




すべてGMT -4です。現在の時刻は 11:42午後


提供: vBulletin、著作権© 2000 - 2006、Jelsoft企業株式会社。言語翻訳による電源
vBCredits v1.4著作権© 2007 - 2008 、 PixelFXスタジオ
は、 UNIXおよびLinuxフォーラムのコンテンツ著作権© 1993 〜 2009 。すべての権利を管理しReserved.Ad RedTyger

コンテンツ関連のURLで vBSEO 3.2.0