0

これが私がやりたいことです。いくつかのサブディレクトリを持つ Samba 共有ディレクトリがあります。構造は次のようになります。

/srv/samba/Docutrack/3200/controls
                    ./3200/census
                    ./3200/stat
                    ./3400/controls
                    ./3400/census...etc

あなたは要点を理解します。ネストされたループでやりたいことは、すべてのサブ Docutrack レベルのサブディレクトリを調べて、既にまとめたコマンドを使用して ls 内のすべてのドキュメントの名前を変更することです。名前が変更されると、ls 内のすべてのドキュメントが一時ディレクトリにコピーされ、1 日の終わりに圧縮およびアーカイブされます。元のドキュメントは、特定の指定の CIFS 共有に移動されます。

現在、これはディレクトリごとに機能していますが、それぞれに 9 つのサブディレクトリを持つ 20 の異なる施設 (3200、3400、3700... など) があるため、施設 ID と新しい場所を取るときのサブディレクトリ。Linux+ の Linux コースを受講しましたが、今月までスクリプト作成の経験がありませんでした。私は本当に楽しんでいますが、ネストされたループと bash での構文の仕組みについてあまり知識がないので、ここにいる全員で実行したいと思います。

これが私が今取り組んでいるものの例です。きれいではありませんが、うまくいけば、私が間違っている場所を教えてくれます。

#!/bin/bash

cd /srv/samba/Docutrack/;

declare -a FacArr=("3200","3300","3400",3700")
declare -a FldArr=("controls","census","stat","issues")
Prefix= "Fac_`$FacArr[i]`_`$FldArr[j]`_"`date +_%b_%d_%Y,%H.%M.%S`"
target=/srv/samba/temp;

for i in ${FacArr[@]}
   for j in ${FldArr[@]}
do mv $file ${Prefix}_${file}

名前を変更した後の最終ファイルは次のようになります。

"Fac_3700_controls__Aug_27_2013,12.05.01_SFTP_test_2.txt"
 "Fac_3400_stat__Aug_27_2013,12.05.01_SFTP_test_2.txt"

あなたが与えることができるどんな助けにも感謝します!

編集 少し明確にすることができます。ディレクトリごとに必要なことを正常に実行するスクリプトは次のとおりです。

#!/bin/bash

# cd into working path, all file paths will be relative to this path
cd /srv/samba/Docutrack/3700/controls;

# Set your variables
target=/srv/samba/temp;

# Rename all docs in current directory
for file in `ls`
do 
  mv $file "Fac_3700_controls_"`date +_%b_%d_%Y,%H.%M.%S`${file}
done

# Copy recursively the folders you need to the $target/ directory
cp -a /srv/samba/Docutrack/3700/controls/. $target/;


# Move renamed documents to distination directory
mv /srv/samba/Docutrack/3700/controls/* /media/controls/

EDIT2

これが私が持っている現在のスクリプトです。エラーなしで実行されますが、実際には何もしません。ファイルの名前変更、コピー、移動は行われません。エラーなしで完了しているのに成功しない理由がわかりません。明日も引き続き作業します。皆さん、助けてくれてありがとう!

/bin/bash

cd /srv/samba/Docutrack/

FacArr=('3200' '3300' '3400' '3700')
FldArr=('controls' 'census' 'stat' 'issues')
prefixDate=$(date +_%b_%d_%Y,%H.%M.%S_)
target=/srv/samba/temp

for i in ${FacArr[@]}; do
    for j in ${FldArr[@]}; do
        for file in "/${FacArr[i]}/${FldArr[j]}/"*; do
            mv "$file" "/Fac_${FacArr[i]}_${FldArr[j]}_${prefixDate}_${file}"
               cp -a /srv/samba/Docutrack/${FacArr[i]}/${FldArr[j]}/. $target/
            mv /srv/samba/Docutrack/${FacArr[i]}/${FldArr[j]}/* /${FacArr[i]}/ ${FldArr[j]}/
        done
    done
done

最終編集

やっとスクリプトが完成しました。お世話になった皆様、ありがとうございました。問題であると思われるものに絞り込み、変数の解析の問題をすべて解決しました。最終的なスクリプトは次のとおりです。

#!/bin/bash
#cd /srv/samba/Docutrack/
#
FacArr=('3200' '3300' '3400' '3700')
FldArr=('billing_pa' 'census' 'controls' 'delivery' 'discharge_dc' 'issues' 'med_recs' 'new_admit' 'new_orders' 'refills' 'stat')
prefixDate=$(date +_%b_%d_%Y.%H.%M.%S)
target=/srv/samba/temp/
#
for i in ${FacArr[@]}; do
     for j in ${FldArr[@]}; do
        cd "/srv/samba/Docutrack/""$i"/"$j"/
        for file in ` ls `; do
            mv $file "Fac_""$i""_""$j""_${prefixDate}_""$file"
            cp -a ` ls `  $target
            mv ` ls ` "/media/""$j"/
         done
    done
done
4

1 に答える 1

0

それはあなたのために働きますか?

cd /srv/samba/Docutrack/

FacArr=('3200' '3300' '3400' '3700')
FldArr=('controls' 'census' 'stat' 'issues')
prefixDate=$(date +_%b_%d_%Y,%H.%M.%S)
target=/srv/samba/temp

for i in "${FacArr[@]}"; do
    for j in "${FldArr[@]}"; do
        for file in "${FacArr[i]}/${FldArr[j]}/"*; do
            mv "$file" "$target/Fac_${FacArr[i]}_${FldArr[j]}_${prefixDate}_${file}"
        done
    done
done

$targetこれらのファイルをディレクトリに配置するのは正しいですか?

于 2013-08-28T21:59:16.820 に答える