次に、ファイルとサブフォルダをコピーしようとします。ㅏフォルダがありませんㅏそれ自体。例えば、ㅏフォルダには次の項目が含まれます。
| file1.txt
| file2.txt
| subfolder1
次のコマンドを実行すると、誤った結果が表示されます。
sudo cp -r /home/username/A/ /usr/lib/B/
明らかにする
/usr/lib/B/A/...copied files...
変える..
/usr/lib/B/...copied files...
なしでどのように目的を達成できますか?ソースフォルダ
答え1
高度なCP
cp -r /home/username/A/. /usr/lib/B/
これは、ターゲットディレクトリがすでに存在するかどうかにかかわらず動作するため、特に優れています。
シェルワイルドカード
ディレクトリに多くのオブジェクトがない場合は、シェルグローブを使用できます。
mkdir -p /usr/lib/B/
shopt -s dotglob
cp -r /home/username/A/* /usr/lib/B/
同期
rsync -a /home/username/A/ /usr/lib/B/
/
ソースパスの末尾にある項目は重要です。宛先ディレクトリが既に存在するかどうかに関係なく有効です。
探す
mkdir -p /usr/lib/B/
find /home/username/A/ -mindepth 1 -maxdepth 1 -exec cp -r -t /usr/lib/B/ {} +
または空のサブディレクトリが必要ない場合:
find /home/username/A/ -mindepth 1 -type f -exec cp --parents -t /usr/lib/B/ {} +
(いいえmkdir
)
答え2
GNUシステムの場合は、次のようにしますman cp
。
-T, --no-target-directory
treat DEST as a normal file
cp -rT /home/username/A/ /usr/lib/B/
これにより、正しい内容を作成できます。
答え3
cp
ディレクトリ自体ではなくディレクトリの内容をコピーするように指示します。
sudo cp -r /home/username/A/* /usr/lib/B/