在 bash 中重命名文件的陷阱

2024-03-11

我正在这里阅读指南http://mywiki.wooledge.org/BashFAQ/030 http://mywiki.wooledge.org/BashFAQ/030在这个链接上给出了一些例子我试图理解它们一个示例代码说

# Bash
# Replace all spaces with underscores
for f in *\ *; do mv -- "$f" "${f// /_}"; done

到目前为止我所知道的是在搜索和替换时使用反斜杠来表示特殊字符,例如 ~ 或 # 等的空格 示例或在上面示例中的 shell 脚本中,它们有
used ${f// /_}
正斜杠,我不清楚这是否允许?
在同一页面的另一个示例中 他们给出了一个删除空格并将其替换为下划线的示例

find . -depth -name "* *" -exec bash -c 'dir=${1%/*} base=${1##*/};
mv "$1" "$dir/${base// /_}"' _ {} \;

在上面的例子中我不清楚以下内容
1) dir=${1%/*}
2) base=${1##*/}
3)当它说mv "$1"上述语句中的 $1 是什么意思,
4)最后find命令被关闭-exec <something> _ {} \;
现在下划线 _ 、大括号 {} 和反斜杠后跟 \; 上面的冒号有什么用?
在第三个例子中他们说

# tolower - convert file names to lower case
# POSIX
for file in "$@"do 
   [ -f "$file" ] || continue                # ignore non-existing names   
 newname=$(echo "$file" | tr '[:upper:]' '[:lower:]')     # lower case   
 [ "$file" = "$newname" ] && continue      # nothing to do   
 [ -f "$newname" ] && continue             # don't overwrite existing files  
  mv -- "$file" "$newname"done 

我不清楚以下几行
5) [ -f "$file" ] || continue # ignore non-existing names
我不清楚用 [ ] 测试条件如果 $file 存在那么 OR 条件有什么用 ||这里和 continue 语句
6) [ -f "$newname" ] && continue # don't overwrite existing files这里与第5点有同样的疑问


${f// /_}

意思是:用下划线替换所有出现的空格

ref http://thegeekstuff.com/2010/07/bash-string-manipulation


${1%/*}

意思是:删除最短匹配/*从字符串末尾开始

ref http://thegeekstuff.com/2010/07/bash-string-manipulation


${1##*/}

意思是:删除最长的匹配*/从字符串前面

ref http://thegeekstuff.com/2010/07/bash-string-manipulation


当它说mv "$1"1美元是什么意思

$1是第一个位置参数。所以如果你的脚本有这个

echo $1

你这样称呼

foo.sh 111

那么输出将是

111

最后 find 命令被关闭-exec <something> _ {} \;现在下划线有什么用_, 大括号{}和一个反斜杠 接下来是上面的冒号\;?

下划线是参数的占位符$0

ref http://linux.die.net/man/1/bash

The {} \;习语与find,也就是说:为每个文件运行一次此命令

ref http://linux.die.net/man/1/find


[ -f "$file" ] || continue

意思是:如果$file不是文件,则继续(立即结束循环的当前迭代并开始下一个)

ref http://ss64.com/bash/test.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 bash 中重命名文件的陷阱 的相关文章

  • 为什么我不能将 sed 的输出重定向到文件

    我正在尝试运行以下命令 someprogram tee dev tty sed s 2 gt output file 但当我去查看时 该文件始终是空白的 如果我删除 gt output file从命令末尾 我可以看到 sed 的输出 没有任
  • 从 PL/SQL 调用 shell 脚本,但 shell 以 grid 用户而非 oracle 身份执行

    我正在尝试使用 Runtime getRuntime exec 从 Oracle 数据库内部执行 shell 脚本 在 Red Hat 5 5 上运行的 Oracle 11 2 0 4 EE CREATE OR REPLACE proced
  • 通过特定分隔符删除字符串

    我的文件中有几列 其中第二列有 分隔符 我想删除第二列中的第一个 第三个和第四个字符串 并将第二个字符串留在该列中 但我有正常的分隔符空间 所以我不知道 input 22 16050075 A G 16050075 A G 22 16050
  • 如何使用 bash 锁定文件

    我有一个任务从远程服务器同步目录 rsync av email protected cdn cgi l email protection srv data srv data 为了使其定期运行并避免脚本 reEnter 问题 我使用 rsyn
  • 从 csv 文件中删除特定列,保持输出上的相同结构[重复]

    这个问题在这里已经有答案了 我想删除第 3 列并在输出文件中保留相同的结构 输入文件 12 10 10 10 10 1 12 23 1 45 6 7 11 2 33 45 1 2 1 2 34 5 6 I tried awk F 3 fil
  • 仅打印“docker-container ls -la”输出中的“Names”列

    发出时docker container ls la命令 输出如下所示 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES a67f0c2b1769 busybox tail f dev
  • bash 中 :-(冒号破折号)的用法

    bash中这种风格的含义是什么 PUBLIC INTERFACE eth0 目的是什么 If PUBLIC INTERFACE存在且不为null 则返回其值 否则返回 eth0 实际上有一些记录在bash 手册页 http linux di
  • Pure Bash 替换捕获组

    我有这个示例字符串 test string 13A6 该字符 数字可以是从 0 到 9 以及从 A 到 F 我想要这个输出 1 3 A 6 我有这个工作 result echo test string sed s g 我想在没有 sed 的
  • 匹配模式后添加行[重复]

    这个问题在这里已经有答案了 我有一个文件说test具有以下值 Linux Solaris Fedora Ubuntu AIX HPUX 如何在匹配 AIX 的行后面添加一行系统主机名 如果我做 echo hostname gt gt tes
  • Linux 中的动态环境变量?

    Linux 中是否可以通过某种方式拥有动态环境变量 我有一个网络服务器 网站遵循以下布局 site qa production 我想要一个环境变量 例如 APPLICATION ENV 当我在 qa 目录中时设置为 qa 当我在生产目录中时
  • 如何在 Linux shell 中将十六进制转换为 ASCII 字符?

    假设我有一个字符串5a 这是 ASCII 字母的十六进制表示Z 我需要找到一个 Linux shell 命令 它将接受一个十六进制字符串并输出该十六进制字符串代表的 ASCII 字符 所以如果我这样做 echo 5a command im
  • 两种情况或 if 哪个更快? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我必须制作一个 非常 轻的脚本 它将接受用户的选项并调用脚本中的函数来执行一些任务 现在我可以使用 IF 和 CASE 选项 但我想知道两
  • Git difftool 未启动外部 DiffMerge 程序

    我一直遵循 戴夫的博客条目 http www davesquared net 2009 05 setting up git difftool on windows html 链接在此answer https stackoverflow co
  • 如何在 Windows 下向 .sh 脚本传递参数?

    我正在尝试在 Windows 下执行 sh 脚本 我安装了 Git 它允许我执行 sh 文件 但是 如果不使用 sh 作为执行前缀 我似乎无法传递任何参数 我的 sh 文件 echo Test 1 如果我用以下命令执行它 gt sh tes
  • 获取变量的名称作为输入并使用该名称更改变量

    我从脚本用户那里获取变量的名称作为第一个参数 并将该变量的值回显到控制台 bin bash variablename 1 echo The value of variablename is variablename 这太棒了 我无法开始工作
  • 从 php 执行 bash 脚本并立即输出回网页

    我有一组 bash 和 Perl 脚本 开发在 Linux Box 上部署所需的目录结构 可选 从svn导出代码 从这个源构建一个包 这在终端上运行良好 现在 我的客户请求此流程的 Web 界面 例如 某些页面上的 创建新包 按钮将一一调用
  • 如何从 bash 数组中删除元素而不展平数组

    我想创建一个采用 bash 数组的函数 如下所示 a element zero element one element two 并删除一个元素 如 元素一 并留下一个数组 如下所示 a element zero element two 这样
  • 使用 su 和 Expect 脚本登录用户时遇到问题

    我正在为一个班级制作一个网站 您可以使用用户名和密码登录 然后它会将您带到一个显示您在班级中的成绩的页面 该网站正在运行bash脚本 https github com jduga002 rapache 并将托管在用户已有用户名和密码登录的计
  • Bash 正则表达式——似乎无法匹配任何 \s \S \d \D \w \W 等

    我有一个脚本试图从 gparted 获取信息块 我的数据如下所示 Disk dev sda 42 9GB Sector size logical physical 512B 512B Partition Table msdos Number
  • 带有变量 bash 的降序循环

    cat fromhere sh bin bash FROMHERE 10 for i in seq FROMHERE 1 do echo i done sh fromhere sh 为什么不起作用 我找不到任何在谷歌中搜索降序循环的示例 甚

随机推荐

  • Go 模板:如何访问模板中的数组项 (arr[2])?

    如何访问模板中的数组项 例如 a 2 每当我这样做时 我都会得到 坏字符 U 005B a 2 您需要使用index模板功能 index a 2
  • map.begin() 的迭代器类型是什么

    template
  • 如何更改 R 的语言环境?

    我在 Ubuntu 12 10 上使用 R 版本 2 15 3 2013 03 01 系统是德语 R 也是如此 这在搜索错误消息时很不方便 以这种方式在 xterm 中执行 R LANG C R部分解决了问题 然后 R 以英文显示所有内容
  • 如何使用Javascript模拟按键? [复制]

    这个问题在这里已经有答案了 是否可以使用 JavaScript 来模拟按键 例如 如何模拟 Ctrl Alt ArrowKey 我想模拟特殊按键 有可用的API 框架吗 可以说 我正在构建一个基于网络的虚拟键盘 如果您的目标是实现 send
  • PHP 5.3 DateTime 用于重复事件

    我有一个日历应用程序 它使用较新的 PHP DateTime 类 我有一种处理重复事件的方法 但它看起来很黑客 我想看看你们是否有更好的想法 我有一个从 2009 年 11 月 16 日 2009 年 11 月 16 日 开始的重复事件 每
  • jQuery Ajax 复选框状态

    我的页面上有复选框 我想通过 ajax 将其状态发送回数据库 我知道如何将 jquery 与 ajax 结合使用 但我不知道如何获取已选中和未选中的状态以及复选框的 id 以便我可以将其发送回服务器 有任何想法吗 if yourCheckb
  • EF4 Code-First 中 OnModelCreating 的目的是什么?

    我很好奇 EF4 Code First 上下文类中 OnModelCreating 的目的是什么 它是如何工作的 这是一个不错的article http blogs msdn com b adonet archive 2010 12 06
  • 使用 Z-Index 的层问题

    我有 2 个控件 一个在另一个之上 滑块上的边框 在边框上 用户可以标记一个片段以在滑块上以不同的颜色显示 因为在xaml中边框是写在slider后面的 所以它出现在slider的顶部 没关系 我的问题是 滑块的拇指也出现在边框下方 如何设
  • 在 python 中使用 Sin-1 或反 sin

    这是我的代码 point of intersection between opposite and hypotenuse x y pygame mouse get pos using formula for length of line l
  • 带有对齐字体很棒图标的多行列表项

    我正在制作一个项目清单 li twitter bootstrap 中每个列表项的标签和不同的 FontAwesome 图标 我试图使列表测试中心垂直 但不能这样 ul class middle li a href i class icon
  • 如何删除c中每行后面的最后一个空格?

    我必须打印出帕斯卡三角形 我的输出如下 1 1 1 1 2 1 我的代码给出了正确的输出 但在每行后面打印了一个额外的空格 有人可以告诉我如何摆脱它吗 这是我的代码 pascal include
  • 将 Spotify URI 编码为 Spotify 代码

    Spotify 代码 https www spotifycodes com index html 是一些小条形码 可让您共享歌曲 艺术家 用户 播放列表等 它们在 条 的不同高度中编码信息 23 个条可以有 8 个离散高度 这意味着 8 2
  • 在 linux / OS X 上启动 mongod 服务的正确方法是什么?

    我已经安装了 mongodb 并且能够运行它 使用它 执行简单的数据库读 写类型的操作 现在我正在尝试设置我的 Mac 以将 mongod 作为服务运行 我收到 未找到命令 的响应 init mongod start 回应 service
  • 在 pl/sql 中计算游标的行数

    我正在尝试计算将从 sql 语句返回的行数 该语句位于游标中 我的代码是这样的 DECLARE v counter int 0 select count into v counter from cursor get sth is selec
  • Airflow:ValueError:无法配置处理程序“处理器” - wasb 记录器

    我正在尝试使用 Azure blob 配置远程日志记录 Airflow version 1 10 2 Python 3 6 5 Ubuntu 18 04 以下是我所做的步骤 在 AIRFLOW HOME config log config
  • 从嵌套列表中提取数据框

    我有一个嵌套的列表列表 其中包含一些数据框 但是 数据框可以出现在列表中的任何级别 我想要最终得到的是一个平面列表 即只有一个级别 其中每个元素都是only数据帧 所有其他东西都被丢弃 我已经为此提出了一个解决方案 但它看起来非常笨重 我确
  • 滚动时 jQuery 下拉菜单位置

    我是 jQuery 新手 正在学习 jQuery 概念 目前 我正在尝试设计一个包含长列表项的自定义下拉菜单 我想在将鼠标悬停在主菜单上时滚动菜单 我正在尝试使用描述的 jquery 滚动菜单自定义 CSShere http css tri
  • 必须声明表变量@table

    我是 C 和 SQL 的初学者 我有一个想要执行的 SQL 插入语句 它要求提供我想要插入的其他变量中的表名称 但是当我运行这个控制台应用程序时 我收到此错误 必须声明表变量 table 这是代码的一部分 StreamReader my r
  • 在网络浏览器中连接到以太坊节点

    我收到此错误 CONNECTION ERROR Couldn t connect to node http localhost 8545 is it running 我目前正在尝试将 Meteor 应用程序与私有测试网络上的节点一起使用 我
  • 在 bash 中重命名文件的陷阱

    我正在这里阅读指南http mywiki wooledge org BashFAQ 030 http mywiki wooledge org BashFAQ 030在这个链接上给出了一些例子我试图理解它们一个示例代码说 Bash Repla