[〜#〜] a [〜#〜]自体なしで[〜#〜] a [〜#〜]フォルダからファイルとサブフォルダをコピーしようとしています。たとえば、[〜#〜] a [〜#〜]フォルダには次のものが含まれます:
| 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...
Origin-folderを使用せずに、期待される方法に到達するにはどうすればよいですか?
高度な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
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
なし)
GNUシステムの場合、man cp
:
-T, --no-target-directory
treat DEST as a normal file
これにより、cp -rT /home/username/A/ /usr/lib/B/
正確に正しいことを行います。
cp
に、ディレクトリ自体ではなくディレクトリの内容をコピーするように指示します。
Sudo cp -r /home/username/A/* /usr/lib/B/