`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 コマンドは、ファイルに対して同じことを行います。
注: これは、シンボリック リンク ソケット、またはディレクトリや通常のファイルではないその他のファイルを完全に無視します。
これでうまくいかない場合は、質問を更新して詳細を含めてください。