答案1
没有find
shopt -s globstar
mv -nv **/*.mp3 /path/to/common/directory
答案2
find . -mindepth 1 -type f -exec mv -i "{}" /common/path \;
find . -mindepth 1 -d -type d -exec rmdir "{}" \;
这会将所有音乐从当前目录移动到,/common/path
第二个将删除所有目录。然后您可以将所有内容移回原始目录。
另外,如果您想覆盖同名的文件,这会提示您。
答案3
find /path/to/music/ -type f -execdir mv -n "{}" /path/to/sharedmusic/ \;
具有重复名称的文件将不是被移动,而是留在原来的位置。
答案4
您可以完成子目录中所有文件的查找,然后执行该查找命令并将其移动到当前目录。
在下面的答案中可以找到一个例子。 https://stackoverflow.com/questions/22388480/how-to-pipe-the-results-of-find-to-mv-in-linux
引用答案:https://stackoverflow.com/a/22388545/879882
xargs
通常用于此目的,并且mv
有一个-t
选项可以促进这一点。find ./ -name '*article*' | xargs mv -t ../backup
如果你
find
支持-exec ... \+
你也可以这样做find ./ -name '*article*' -exec mv -t ../backup {} \+
该
-t
选项可能是 GNU 扩展。当然可以自己推出,也许类似find ./ -name '*article*' -exec sh -c 'mv "$@" "$0"' ../backup {} \+
我们无耻地滥用了一个方便的事实,即后面的第一个参数
sh -c 'commands'
最终作为“脚本名称”参数,$0
以便我们甚至不需要shift
它。