我有一个foo
包含多个文件的目录:
.
??? foo
??? a.txt
??? b.txt
Run Code Online (Sandbox Code Playgroud)
我想将它移动到一个同名的目录中:
.
??? foo
??? foo
??? a.txt
??? b.txt
Run Code Online (Sandbox Code Playgroud)
我目前正在创建一个临时目录bar
,然后foo
进入bar
并重命名bar
为foo
:
mkdir bar
mv foo bar
mv bar foo
Run Code Online (Sandbox Code Playgroud)
但这感觉有点麻烦,我必须为bar
尚未使用的名称选择一个名称。
有没有更优雅或更直接的方法来实现这一目标?如果这很重要,我在 macOS 上。
我的主目录中有许多隐藏的配置文件:
~/
(例如~/.cinnamon
)~/.config/
(例如~/.config/cinnamon-session
)~/.local/share/
(例如~/.local/share/cinnamon-session
)家庭配置文件所在的逻辑是什么?
a) 这三个地方的隐藏文件有什么区别?
b)在这种情况下,“本地”究竟是什么意思,vs config,vs home?
c) 在主目录中,是否还有其他重要的多个应用程序使用的常用配置目录?
Debian 8.6 肉桂 2.2.16
shell 脚本需要做的最常见的事情之一是创建和操作临时文件。这样做安全是一种痛苦,因为你需要避免名称冲突,避免竞争条件,确保该文件具有正确的权限,等等(参见GNU Coreutils的手册和琐碎的博客文章这方面的迹象对这些更详细的讨论问题。)大多数类 Unix 操作系统通过提供mktemp
处理所有这些问题的命令来解决这个问题。但是,这些mktemp
命令的语法和语义没有标准化。如果您真的想安全且可移植地创建临时文件,则必须求助于丑陋的杂物,例如以下内容:
tmpfile=$(
echo 'mkstemp(template)' |
m4 -D template="${TMPDIR:-/tmp}/baseXXXXXX"
) || exit
Run Code Online (Sandbox Code Playgroud)
(此变通方法利用了宏处理器m4
是 POSIX 的一部分这一事实,并m4
公开了mkstemp()
同样由 POSIX 定义的 C 标准库函数。)
鉴于这一切,为什么 POSIX 没有标准化一个mktemp
命令,保证它的存在和至少它行为的某些方面?这是 POSIX 委员会的一个明显疏忽,还是委员会mktemp
实际上已经讨论了标准化的想法并因某些技术或其他原因被拒绝?
我听说过$TEMP
and $TMP
,但我认为它们不是每个发行版的标准。
据我所知,获取临时目录的最佳方法是/tmp
,是否有任何发行版无法使用该路径?
我经常想做这样的事情:
cat file | command > file
Run Code Online (Sandbox Code Playgroud)
(这显然不起作用)。我见过的唯一解决方案是sponge
,即
cat file | command | sponge file
Run Code Online (Sandbox Code Playgroud)
不幸的是,sponge
我不可用(我也不能安装它或任何其他包)。
有没有更标准的快速方法来做到这一点,而不必每次都将其分解为多个命令(管道到临时文件,管道返回原始文件,删除临时文件)?tee
例如,我尝试过,它似乎有效,但它是一致/安全的解决方案吗?