tot*_*oto 3 command-line shell filenames file-copy wildcards
我在我的目录中复制我的文件时遇到问题。
我在很多目录中有.txt和.jpeg文件,我只想.txt根据目录复制文件。例如,我有这个:
direct/direct1
direct/direct2
direct1:
file.txt
file2.txt
file.jpeg
file2.jpeg
direct2:
file3.txt
file4.txt
file3.jpeg
file4.jpeg
Run Code Online (Sandbox Code Playgroud)
在我的复制命令中,我只需要.txt每个目录中的文件
如果要复制.txt目录中的所有文件,请使用通配符模式:
cp direct/direct1/*.txt target
Run Code Online (Sandbox Code Playgroud)
这会将.txt目录direct/direct1中的所有文件复制到目录target(必须已经存在)。
您可以传递多个模式来从多个目录复制文件:
cp direct/direct1/*.txt direct/direct2/*.txt target
Run Code Online (Sandbox Code Playgroud)
如果要复制 的.txt所有子目录中的文件direct,也可以对目录使用通配符:
cp direct/*/*.txt target
Run Code Online (Sandbox Code Playgroud)
如果您只想从某些目录复制,您可以使用仅匹配这些目录的通配符模式。例如,如果direct有四个子目录foo, bar, bazandqux并且您只想从barand复制文件baz,则可以使用
cp direct/ba?/*.txt target
Run Code Online (Sandbox Code Playgroud)
到目前为止,没有一个示例从direct自身复制文件,或从direct. 如果.txt要从中复制文件direct,则需要将其包含在列表中,例如
cp direct/*.txt direct/*/*.txt target
Run Code Online (Sandbox Code Playgroud)
如果您想从direct、其所有子目录、它们的所有子目录等递归复制文件**,则可以使用通配符(如果您的 shell 支持)。它在 zsh 中开箱即用,但在bash 中,您需要先使用shopt -s globstar.
cp direct/**/*.txt target
Run Code Online (Sandbox Code Playgroud)
请注意,所有文件都被复制到target自身中,这不会重现目录结构。如果要重现目录结构,则需要不同的工具,例如rsync ( tutorial ) 或pax。
rsync -am --include='*.txt' --include='*/' --exclude='*' direct/ target/
cd direct && pax -rw -pe -s'/\.txt$/&/' -s'/.*//' . target/
Run Code Online (Sandbox Code Playgroud)