grep/find/awk/xargs
我还不太熟悉所有的技巧。
我有一些与特定模式匹配的文件,例如*.xxx
.这些文件位于某个目录中的随机位置。如何找到所有此类文件,并将它们移至 Unix 上我的主目录中的文件夹(该文件夹可能尚不存在)?
答案1
mkdir ~/dst
find source -name "*.xxx" -exec mv -i {} -t ~/dst \;
答案2
如果您想将目录层次结构内的所有文件移动到单个目标目录,请在 bash ≥4 (放入shopt -s globstar
您的~/.bashrc
)或 zsh 中:
mkdir ~/new-directory
mv -i **/*.xxx ~/new-directory
在其他外壳中:
mkdir ~/new-directory
find . -name '*.xxx' -exec mv -i {} ~/new-directory \;
如何读取该find
命令:
.
:遍历当前目录-name '*.xxx'
:作用于名称与此模式匹配的文件-exec … \;
:对每个文件执行此命令,替换{}
为文件的路径
如果您有许多文件,则有一个更复杂的命令,find
它的速度更快,因为它不需要为mv
每个文件调用单独的进程:
find . -name '*.xxx' -exec sh -c 'mv -i "$@" "$0"' ~/new-directory {} +
+
最后的 告诉我们find
一次对多个文件调用该命令。由于find
只能将文件名放在命令行末尾,并且mv
需要将目标目录放在最后,因此我们使用中间 shell 来重新排列参数("$0"
是 shell 的第一个参数,~/new-directory
,"$@"
是来自的后续参数find
的扩展{}
)。
答案3
如果要将匹配源文件的目录结构复制到新的目标目录,可以使用 GNU cp 的- 父母选项:
mkdir /path/to/target_dir
cd source_dir
find . -name '*.xxx' -exec cp -iv --parents -t /path/to/target_dir {} +
答案4
您-exec
也 :
mkdir /path/to/dest
cp `find /path/to/source -name "*.jar"` /path/to/dest