如何通过终端复制每个子目录中除一个文件外的整个目录?

opt*_*ist 8 command-line cp

我有一个名为“Java”的文件夹,它有 20 个子文件夹(“Day-01”到“Day-20”)。每个子文件夹都有一个或两个“.wav”文件以及一些其他文件。我想通过终端复制除“.wav”文件之外的整个目录。我该怎么做呢?

hee*_*ayl 13

最简单的方法是使用从复制中排除文件rsync--exclude选项.wav

rsync -av --exclude='*.wav' /path/to/Java /out/dir
Run Code Online (Sandbox Code Playgroud)

例子:

/foobar/Java% tree
.
??? day-01
?   ??? 01.sh
?   ??? 01.txt
?   ??? 01.wav
??? day-02
?   ??? 02.sh
?   ??? 02.txt
?   ??? 02.wav
??? day-03
?   ??? 03.txt
?   ??? 03.wav
??? day-04
?   ??? 04.txt
??? day-05
    ??? 05.wav

/foobar/out% rsync -av --exclude='*.wav' ../Java .
sending incremental file list
Java/
Java/day-01/
Java/day-01/01.sh
Java/day-01/01.txt
Java/day-02/
Java/day-02/02.sh
Java/day-02/02.txt
Java/day-03/
Java/day-03/03.txt
Java/day-04/
Java/day-04/04.txt
Java/day-05/

sent 564 bytes  received 158 bytes  1,444.00 bytes/sec
total size is 0  speedup is 0.00

/foobar/out% tree
.
??? Java
    ??? day-01
    ?   ??? 01.sh
    ?   ??? 01.txt
    ??? day-02
    ?   ??? 02.sh
    ?   ??? 02.txt
    ??? day-03
    ?   ??? 03.txt
    ??? day-04
    ?   ??? 04.txt
    ??? day-05
Run Code Online (Sandbox Code Playgroud)