3

したがって、実際のフォルダーの内容に基づいてダミーのファイルとフォルダーを作成するには、単純な bash スクリプトが必要です。これが私がこれまでに得たものです

dir=/mnt/TV
dummy_dir=/home/bob/Desktop/dummy

for d in `ls $dir`; do
  mkdir "$dummy_dir/$(basename $d)"
done
for f in `ls -a $dir`; do
  touch "$dummy_dir/$(basename $f)"
done

しかし、それは正しく動作していません..ありがとう

4

2 に答える 2

2

`cmd`を使用するのではなく$(cmd)、新しいスタイルであり、可能であれば使用する必要があります。より明確であり、ネストすることもできます。しかし、私はどちらも使用しません。

あなたが抱えている問題は、あなたがmkdirであることに関係していると思われます。これには、ベースを作成する前にすべての最上位ディレクトリが存在する必要があります。

mkdir /tmp/path/here 

現在存在するものに関係なくツリー全体を作成する -p フラグを使用しない限り、/tmp/path が存在する必要があります。

もう 1 つの問題として、元のディレクトリ内のファイルの種類に関係なく、隠しファイルとディレクトリがファイルとして作成され、非隠しファイルとディレクトリがディレクトリとして作成されることがあります。

これを行うより良い方法は、find を使用することです。例えば

dir=/mnt/TV
dummy_dir=/home/bob/Desktop/dummy

find $dir -type d -printf '%P\n' | \
    while read dir; do 
        [[ -d "$dummy_dir/$dir" ]] || mkdir -p "$dummy_dir/$dir"
    done

find $dir -type f -printf '%P\n' | \
     while read file; do
        [[ -f "$dummy_dir/$file" ]] || touch "$dummy_dir/$file"
     done

最初の find コマンドは、$dir のサブディレクトリであるすべてのディレクトリの $dir からの相対パスを出力します。次に、これらは while ループにパイプされます。このループは、ディレクトリが dummy_dir に存在するかどうかをテストし、存在しない場合は作成します。

2 番目の find コマンドは、ファイルに対して同じことを行います。

注: これは、シンボリック リンク ソケット、またはディレクトリや通常のファイルではないその他のファイルを完全に無視します。

これでうまくいかない場合は、質問を更新して詳細を含めてください。

于 2013-01-14T10:57:54.680 に答える
0
cp -pvr /mnt/TV /home/bob/Desktop/dummy

これ以上のことを達成しようとしている場合は、質問でそれを指定してください。

于 2013-01-14T11:12:27.187 に答える