私が望むのは、ディレクトリ1を取得することです。
Dir1
Dir A
File A
Dir B
File B
次に、このfind
コマンドを使用して、Dir 1の各ファイルに次のような既存のハードリンクがあることを確認します。
find . -type f -links 1 -exec cp -al {} /path/to/Dir2/{} \;
それから私は次のように終わりたいと思います:
Dir2
Dir A
File A (hardlink)
Dir B
File B (hardlink)
今、私はディレクトリ内のハードリンク以外のすべてのファイルを見つけ、そのファイルのハードリンクを別のディレクトリに配置する方法を知っていますが、新しいハードリンクを作成するときに同じディレクトリ構造を維持したいと思います。現在のコマンドは、次のような結果を生成します。
Dir2
File A (hardlink)
File B (hardlink)
ファイルBを見ていて、ファイルBにリンクが1つしかないと仮定すると(まだハードリンクされていない)、そのディレクトリを新しいディレクトリにコピーするために「Dir B」をどのように参照しますか?私は「/Path/To/Dir B」が単に「Dir B」になることを望んでいません。
Bashでこれを行う方法はありますか?
ベストアンサー1
find
などのツールを使用してこれを行うことができます。mkdir
Bashファイルで、.sh
/path/to/Dir1をソースディレクトリパスに置き換え、/path/to/Dir2をターゲットディレクトリパスに置き換えることを忘れないでください。
#!/bin/bash
src_dir="/path/to/Dir1"
dest_dir="/path/to/Dir2"
find "$src_dir" -type d -print0 | while IFS= read -r -d '' dir; do
dest_subdir="${dir/$src_dir/$dest_dir}"
mkdir -p "$dest_subdir"
find "$dir" -maxdepth 1 -type f -links 1 -print0 | while IFS= read -r -d '' file; do
cp -al "$file" "$dest_subdir"
done
done