gab*_*cio 11 linux bash shell command-line
如何将文件夹 A 中的隐藏文件和隐藏子目录(以点开头的)复制到文件夹 B?例如,如果我有这个结构:
A/a
A/b
A/.a
A/.b/
A/.b/somefile
A/.b/.c
Run Code Online (Sandbox Code Playgroud)
我只想将 A 中的隐藏文件和隐藏子目录复制到 B:
B/.a
B/.b/
B/.b/somefile
B/.b/.c
Run Code Online (Sandbox Code Playgroud)
我已经尝试过这个命令:cp A/.* B
来自这个其他超级用户问题。但是,它不会复制子目录。也尝试过cp -r A/.* B
,但它会复制,.
所以我以 A 的精确副本(包括普通文件)结尾。任何帮助表示赞赏。
Omn*_*nce 18
只要你只是在寻找A级别的隐藏文件和文件夹而不想要,例如
A/b/.hidden
Run Code Online (Sandbox Code Playgroud)
要被复制,你应该可以使用这个:
cp -r A/.[^.]* B
Run Code Online (Sandbox Code Playgroud)
它基本上意味着复制以 a 开头的任何内容,.
然后复制除 a 以外的任何字符.
过滤掉.
并..
编辑:从 cp 命令中删除了 -p,因为 Asker 没有表示他想要保留任何所有权、日期等。
问题A/.*
是存在也.
与A
模式匹配的目录。
您可以打开扩展的 glob 模式并使用以下内容:
shopt -s extglob
cp -r A/.!(?(.)) B
Run Code Online (Sandbox Code Playgroud)
它匹配名称以点开头且第二个字符既不是点也不是空的文件( ?(.) 不匹配任何内容或点,!(...) 否定它,即 !(?(.)) 匹配其他所有内容比没有或一个点)。
find A/ -type f -maxdepth 1 -name \'.*\' -exec cp -p {} B/ \\;\n
Run Code Online (Sandbox Code Playgroud)\n\n基本语法如下:
\n\nfind A/ -type f
:find
目录中A/
类型为文件(而不是目录)\xe2\x80\xa6 的项目-maxdepth 1 -name \'.*\'
:对于1 个以. 开头的maxdepth
目录。name
.
-exec cp -p {} B/ \\;
:一旦找到这些文件,带有标志的命令exec
将保留从源 ( ) 到目标的日期/时间。cp
-p
{}
B/
我喜欢使用maxdepth
添加控制层,这样我就不会意外地复制整个文件系统。但请随意删除它。
归档时间: |
|
查看次数: |
22141 次 |
最近记录: |