qod*_*nja 24 grep file-copy rename
我还不是很熟悉grep/find/awk/xargs
相当的所有技巧。
我有一些匹配特定模式的文件,比如*.xxx
. 这些文件位于某个目录中的随机位置。我怎样才能找到所有这些文件,并将它们移动到我在 Unix 上的主目录中的一个文件夹(可能还不存在)?
Kev*_*vin 23
mkdir ~/dst
find source -name "*.xxx" -exec mv -i {} -t ~/dst \;
Run Code Online (Sandbox Code Playgroud)
Gil*_*il' 18
如果要将目录层次结构中的所有文件移动到单个目标目录,请在 bash ?4 (放入shopt -s globstar
您的~/.bashrc
)或 zsh 中:
mkdir ~/new-directory
mv -i **/*.xxx ~/new-directory
Run Code Online (Sandbox Code Playgroud)
在其他外壳中:
mkdir ~/new-directory
find . -name '*.xxx' -exec mv -i {} ~/new-directory \;
Run Code Online (Sandbox Code Playgroud)
如何阅读此find
命令:
.
: 遍历当前目录-name '*.xxx'
: 处理名称与此模式匹配的文件-exec … \;
: 对每个文件执行此命令,替换{}
为文件路径find
如果您有很多文件,则使用更复杂的命令会更快,因为它不需要mv
为每个文件调用单独的进程:
find . -name '*.xxx' -exec sh -c 'mv -i "$@" "$0"' ~/new-directory {} +
Run Code Online (Sandbox Code Playgroud)
将+
在年底讲述find
在同一时间调用多个文件的命令。由于find
只能将文件名放在命令行的末尾,并且mv
需要将目标目录放在最后,所以我们使用一个中间shell来重新排列参数("$0"
是shell的第一个参数~/new-directory
,"$@"
后面的参数来自find
的扩展{}
)。