2017-02-20 4 views
0

.sh .cpp .c拡張子を持つすべてのファイルをコピーする必要があります。私のデスクトップのディレクトリに移動して、同じ名前のファイルの名前を変更してください。 hello.cppという名前のファイルが2つある場合、名前をhello1.cppに変更します。.sh .cpp .c拡張子を持つすべてのファイルを見つけて、デスクトップのディレクトリにコピーします。同じ名前のファイルがある場合は、名前を変更してください。

find /root \ (-name *.cpp -o -name *.sh \) -exec cp {} /root/Desktop/myNewDir \; 

が、私はこのエラーを得続ける:

は、私はすでにこれを試してみました

cp: '/root/Desktop/mynewDir/hello.cpp' and '/root/Desktop/myNewDir/hello.cpp' are the same file 
+0

あなたはなぜそこに括れを入れて、なぜあなたはそれらのうちの1つを適切にエスケープしていませんか? –

+0

このエラーは、ファイルをコピーしていることを示しています。 – choroba

答えて

1

あなたが上書きコピーして同じファイルを-ing /rootfindに再帰的に横断しているので、これが起こっていますそれ。

あなたは再帰に固執したい場合は、findの再帰から、その後-prune/root/Desktop/myNewDir/

find /root/ -type d -name /root/Desktop/myNewDir/ -prune -o -type f \ 
    \(-name '*.cpp' -o -name '*.sh' \) -exec cp --backup=numbered 
     -t /root/Desktop/myNewDir/ {} + 

あなたは、再帰をしたくない、これは非常に簡単になった場合:

find /root/ -maxdepth 1 -type f \(-name '*.cpp' -o -name '*.sh' \) \ 
    -exec cp -t /root/Desktop/myNewDir/ {} + 
関連する問題