9

9 つのサブディレクトリと 10 個のファイルを含む 1 つのディレクトリがあります。サブディレクトリには、次のレベルのサブディレクトリとファイルがあります。

/home/directory/
/home/directory/subdirectory1
/home/directory/subdirectory2
...
/home/directory/subdirectory9
/home/directory/file1
...
/home/directory/file10

以下を除いて、すべてのサブディレクトリとファイルを再帰的にコピーしたい:

/home/directory/subdirectory5
/home/directory/subdirectory7

そのための最良の方法は何ですか?

4

7 に答える 7

30
rsync -avz --exclude subdirectory5 --exclude subdirectory7 /home/directory/ target-path
于 2012-08-22T12:17:30.443 に答える
11

でそれを行う良い方法はわかりませんが、スイッチを使用するとcpかなり簡単です。rsync--exclude

于 2012-02-27T12:11:43.133 に答える
8

多分findコマンドがあなたを助けるでしょう:

$ find /home/directory -mindepth 1 -maxdepth 1 -name 'subdirectory[57]' -or -exec cp -r {} /path/to/dir \;
于 2012-02-27T12:34:20.377 に答える
2

--exclude次のオプションを使用できtarます。

{ cd /home/directory; tar -c --exclude=subdirectory5 --exclude=subdirectory7 .; } | { cd _destination_ ; tar -x; }
于 2012-02-27T21:06:08.017 に答える
2

で使用rsyncする--exclude方が良い

于 2012-02-27T18:40:36.883 に答える
1

cp次のようなコマンドを使用しないのはなぜですか。

cp -r /home/directory/!(subdirectory5|subdirectory7) /destination
于 2012-08-22T07:38:21.660 に答える
1

Kev の方法の方が優れていますが、これも機能します。

find "/home/folder" -maxdepth 1 | sed -e "/^\/home\/folder$/d" -e "/^\/home\/folder\/subfolder5$/d" -e "/^\/home\/folder\/subfolder7$/d" -e "s/^/cp \-r /" -e  "s/$/ \/home\/target/" | cat

説明:

find "/home/folder" -maxdepth 1 |
// get all files and dirs under /home/folder, pipe output

sed -e "/^\/home\/folder$/d" 
// have sed strip the path being searched, or the cp -r we prepend later will pickup the excluded dirs again.

-e "/^\/home\/folder\/subfolder5$/d"
// have sed strip subfolder5

-e "/^\/home\/folder\/subfolder7$/d"
// have sed strip subfolder7

-e "s/^/cp \-r /"
// have sed prepend "cp -r " to each line

-e  "s/$/ \/home\/target/" | cat
// have sed append targetdir to each line.

出力:

cp -r /home/folder/subfolder9 /home/target
cp -r /home/folder/subfolder1 /home/target
cp -r /home/folder/file10 /home/target
cp -r /home/folder/subfolder2 /home/target
cp -r /home/folder/file1 /home/target
cp -r /home/folder/subfolder3 /home/target

に変更| cat| shてコマンドを実行します。

<ここに大きな免責事項があります>

Kevのソリューションの方が優れているはずです

于 2012-02-27T12:47:28.920 に答える