dea*_*mer 14 command-line-interface nix mv wildcards
这是一个有点尴尬的问题,但我不得不承认,在我职业生涯的后期,我仍然对 mv 命令有疑问。
我经常遇到这个问题:我需要将所有文件递归地向上移动一层。假设我有文件夹 foo,里面有一个文件夹 bar。Bar 有一堆文件和文件夹,包括点文件和文件夹。如何将 bar 中的所有内容移动到 foo 级别?
如果 foo 为空,我只需将 bar 移到上一层,删除 foo 并将 bar 重命名为 foo。部分问题是我无法弄清楚“包括点在内的一切”的 mv 通配符是什么。这个问题的一部分是 - 是否有对 cp 和 mv 命令在某处使用的通配符的深入讨论(谷歌搜索这只会带来非常基本的教程)。
Den*_*son 19
在 Bash(和其他一些)中,您可以使用大括号扩展在一行中完成此操作:
mv bar/{,.}* .
Run Code Online (Sandbox Code Playgroud)
逗号分隔空值和点,因此该mv命令会看到匹配*和.*
最简单的方法是用两个命令来执行此操作,因为 * 与 .whatever 不匹配
cd /foo
mv bar/* ./
mv bar/.??* ./
Run Code Online (Sandbox Code Playgroud)
你不想使用我在犯这个错误时发现的 bar/.* :
rm -rf ./.*
Run Code Online (Sandbox Code Playgroud)
这是一件坏事。有人想猜猜为什么吗?;-)