bash - 在 Bash For Loop 中使用 CD - 仅获取相对路径
问题描述
我有一个小脚本用于组织目录中的文件,现在我试图在一个或多个文件夹上运行它。MasterDir/dir1、MasterDir/dir2 等
运行以下代码MasterDir
会导致错误,因为$dir
它只是一个相对路径,但我无法弄清楚$dir
在这种情况下如何获取完整路径
for dir in */; do
echo $dir
cd $dir
cwd="$PWD"
mkdir -p "VSI"
mv -v *.vsi "$cwd/VSI"
mv -v _*_ "$cwd/VSI"
done
解决方案
我建议使用括号在子shell中运行循环体:
for dir in */; do
(
echo $dir
cd $dir
cwd="$PWD"
mkdir -p "VSI"
mv -v *.vsi "$cwd/VSI"
mv -v _*_ "$cwd/VSI"
)
done
由于它在子 shell 中运行,因此该cd
命令不会影响执行脚本的父 shell。
推荐阅读
- apache-kafka - 我们可以使用 Kafka Streams API 对消息进行顺序处理吗?
- xamarin - 为什么文件打不开?具有依赖注入的 FileProvider
- android - 快速持续推送通知
- jquery - 带有模型和百里香叶的 Spring Boot Ajax 发布表单提交
- linux - bash 脚本中的事件指示符
- postgresql - 合并中的 Concat 函数
- javascript - 如果包装器包含特定元素,则替换 HTML 标记
- walmart-api - 沃尔玛搜索不尊重 responseGroup 参数
- javascript - HTML textarea到javascript并保持换行符
- flutter - 禁用全屏对话框上的取消按钮