私のNASデバイスが先週末にクラッシュしました。 IT担当者が正しい方法で復元していないことは明らかですか? "lost+found" ディレクトリには約 50,000 個のディレクトリがあり、各ディレクトリには "#4289756" などの数字名があります。欠落しているすべてのファイルがこのディレクトリにあるようです。各ファイルには、元の日付と所有者情報(Linux)が含まれています。従業員が見つけられるように整理する必要があります。
私の目標は、これらのファイルを構造にコピー/移動して、各従業員が自分のファイルを含むフォルダを持ち、各フォルダを毎月さらに分割することです。
デバイス自体は、通常のBashコマンドのサブセットのみをサポートするLinuxの単純なバージョンであるBusyboxを実行します。 「find」コマンドを含むスクリプトを使用して所有者と日付で並べ替え、「-exec cp」を使用して適切な場所にパイプすることができると思いましたが、Busyboxにはその機能がないようです。
これは誰かが提案したものですが、元のディレクトリに正しいUIDがあると仮定していますが、そうではありません。
cd /lost+found ; for i in *; do USER=`ls -l $i | awk '{print $3}'`; mkdir -p /home/$USER/recovered ; cp -a $i /home/$USER/recovered/$i ; done
答え1
各デバイスには異なる機能セットを持つ独自のBusyBoxコンパイルがあるため、お使いのデバイスが何をサポートしているかは不明です。私が正しく理解した場合、同様のディレクトリがあり、/lost+found/#123456
そのディレクトリ内のすべてのファイルは同じユーザーに属します。これは、これらのディレクトリをユーザーのホームディレクトリに渡すテストされていないスクリプトです。私はあなたのユーザー名にスペースがなく、ユーザーのホームディレクトリが規則に従うと仮定します/home/$username
。
cd /lost+found
[ -d /root/recovered ] || mkdir /root/recovered
for d in *; do
username=$(ls -l "$d" | sed -e 's/^[^ ] *[0-9][0-9]* */' -e 's/ .*//' -e q)
if [ -d "/home/$username" ]; then
dest=/home/$username/recovered
else
homedir=/root/recovered/$username
fi
[ -d "$dest" ] || mkdir "$dest"
cp -Rp "$x" "$dest"
done
awkコマンドがファイルの所有者を複数回印刷することを除いて、これはあなたが投稿したものとほぼ同じです。awk '1 {print $3}'
上記のように使用またはsedできます。間違った所有権を選択した場合は、実際にls -ld
実行したコマンドに書き込んだものか、状況の説明があります。間違っています。また、スクリプトをより強力にしました。特に、システムユーザーが所有するファイルが/root/recovered
。
それでも問題が解決しない場合は、問題を明確に説明してください。エラーメッセージls
または出力をコピーして貼り付けます。