フォルダー自体なしでフォルダーからファイルをコピーする方法


39

私はからのファイルとサブフォルダをコピーしようとしていなくて、フォルダ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なしで期待されるものに到達するにはどうすればよいですか

回答:


67

高度な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


最初のものは問題なく動作します!home / username / A / *(星記号付き)が意味をなさない理由はありますか?最後にドットが付いたバリアントが助けてくれました、ありがとう!
pushandpop

@pushandpop A/*は理にかなっていますが、機能しない状況があります。
ハウケレイジング

3
shoptあるbash特定。ではzsh、を使用します*(D)。でksh93FIGNORE='@(.|..)'cp -tGNU固有です。findそれは両方のコピーになるように、1つは正常に動作しませんA/し、何回か(サブディレクトリを含む)にその内容を。
ステファンシャゼル

1
あなたも欲しい-maxdepth 1-mindepth-maxdepth。というGNU拡張は、現在もいくつかの他の移植性によりサポートfind .../. ! -name . -prune -exec ....
ステファンChazelas

@StéphaneChazelas私はどこかにタイプミスがあると思います。find .../.ここでエラーが発生します。
ハウケレイジング

10

GNUシステムの場合、以下からman cp

   -T, --no-target-directory
          treat DEST as a normal file

これによりcp -rT /home/username/A/ /usr/lib/B/、正確に正しいことを行うように書くことができます。


これは受け入れられた答えでなければなりません、これはシェルのグロビングや以外の何かを使用するよりも適切ですcp。しかし、-TGNU以外では動作しないことは事実ですcp
-noraj

3

cpディレクトリ自体ではなく、ディレクトリの内容をコピーするように指示します。

sudo cp -r /home/username/A/* /usr/lib/B/

ありがとう!ただし、/ usr / lib / B /はディレクトリではありません
-pushandpop

shopt -s dotglobドットファイルがある場合、これが機能する必要があり/home/username/A/ます。
トークラウド

1
@pushandpopええ、はい。それがあなたの質問にあったターゲットなので、私はそれがディレクトリだと思った。ファイルをコピーする前に、ターゲットを作成する必要があります。
テルドン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.