我在目录树下有一堆 XML 文件,我想将它们移动到同一目录树中具有相同名称的相应文件夹。
这是示例结构(在外壳中):
touch foo.xml bar.xml "[ foo ].xml" "( bar ).xml"
mkdir -p foo bar "foo/[ foo ]" "bar/( bar )"
Run Code Online (Sandbox Code Playgroud)
所以我的方法是:
find . -name "*.xml" -exec sh -c '
DST=$(
find . -type d -name "$(basename "{}" .xml)" -print -quit
)
[ -d "$DST" ] && mv -v "{}" "$DST/"' ';'
Run Code Online (Sandbox Code Playgroud)
这给出了以下输出:
‘./( bar ).xml’ -> ‘./bar/( bar )/( bar ).xml’
mv: ‘./bar/( bar )/( bar ).xml’ and ‘./bar/( bar )/( bar ).xml’ are the same file …
Run Code Online (Sandbox Code Playgroud) 您可以使用
tty 驱动程序中的“lnext”功能(默认情况下通常为 ^V)
但是,我将Ctrl+绑定v到终端模拟器中的“粘贴”。(因为我不使用控制流)我想重新绑定lnext
到Ctrl+ q。我尝试了以下~/.zshrc
setopt noflowcontrol # Don't use ^s and ^q for control flow
bindkey -r "^Q" # Unbind ^q from push-line
stty lnext '^Q' # Bind ^q to lnext
Run Code Online (Sandbox Code Playgroud)
但是,它似乎不起作用。有没有办法重新绑定lnext
到Ctrl+ q?
我已经做了更多的故障排除,似乎无法重新绑定其他 stty 键。我删除setopt noflowcontrol
进行测试,然后尝试stty start '^A'
或stty start '^B'
。两者都没有任何影响;start
仍然绑定到Ctrl+ q。(FWIW 我尝试了文字^A
or^B
和lnext
前面的字符本身。)
我正在尝试将 RSA 密钥设置为环境变量,它作为文本文件包含换行符。
每当我尝试从文件中读取并将其传递给环境变量时,它只会停在第一行的换行符处。我怎样才能防止这种情况?
所以,我写了一个简单的脚本来将sh
-styleexport key=value
语句转换为csh-style
setenv key value
for docker-machine env
。
#!/bin/sh
docker-machine env | sed -e 's/export/setenv/' -e 's/=/ /' -e '$d'
echo '# eval `docker-machine env`'
Run Code Online (Sandbox Code Playgroud)
它产生以下输出
setenv DOCKER_TLS_VERIFY "1"
setenv DOCKER_HOST "tcp://<ipv4 address>:<port>"
setenv DOCKER_CERT_PATH "<HOME>/.docker/machine/machines/default"
setenv DOCKER_MACHINE_NAME "default"
# Run this command to configure your shell:
# eval `docker-machine env`
Run Code Online (Sandbox Code Playgroud)
在 my 中,.tcshrc
我已将此脚本绑定到 alias docker-machine-env-csh
。
我可以使用临时变量来获取这个脚本的输出就好了
% docker-machine-env-csh >! /tmp/csh && source /tmp/csh
Run Code Online (Sandbox Code Playgroud)
但是,我似乎无法直接eval
得到这个别名的结果
% eval `docker-machine-env-csh`
setenv: …
Run Code Online (Sandbox Code Playgroud) 我希望它bash
带有一个选项,可以阻止命令替换剥离尾随换行符。有没有?如果没有,那么是否存在类似的外壳bash
,并且标准\xe2\x80\x94POSIX,我猜\xe2\x80\x94sh
代码将在其中运行,它有这样的选项或者可能有一些特殊的语法对于不去除换行符的命令替换(后者更好)?
FILENAME=$(echo /root/Source/code/script.sh | grep -oE "[^/]+$")
Run Code Online (Sandbox Code Playgroud)
我知道它会给我文件路径中的文件名作为script.sh
. 但是有人可以向我解释一下吗?