我正在尝试mv文件(将其重命名以用破折号替换空格)。 如果我将source和dest参数传递为不带引号,则源会被分解,因为mv认为它是参数的结尾。

如果我在源和目标周围加上参数,则mv报告找不到源。 当前,$ 1和$ 2在开头和结尾都有硬编码的引号。 $ onam和$ dnam是没有硬编码引号的等效项。

提示中的此命令非常有效,因为source和dest用引号引起来:

mv"/home/bryan/renametest/TestFolder/test file""/home/bryan/renametest/TestFolder/test---file"

这是我到目前为止尝试过的(输入和结果)

mv $1 $2

mv: cannot stat `"/home/bryan/renametest/TestFolder/test   file"'

No such file or directory

mv $onam $dnam

mv: cannot move `/home/bryan/renametest/TestFolder' to a subdirectory of itself,

`/home/bryan/renametest/TestFolder/test---file'

mv $1 $dnam

mv: cannot stat `"/home/bryan/renametest/TestFolder/test   file"':

No such file or directory

mv $onam $2

mv: cannot move `/home/bryan/renametest/TestFolder' to `"/home/bryan/renametest/TestFolder/test---file"':

No such file or directory

如何用空格移动那些文件?

这个:stackoverflow.com/questions/2709458/

正如对其他相关问题之一的评论中所建议的那样,请从可变内容中删除引号。 否则,外壳程序将寻找名称中带有""的文件。

香港专业教育学院有和没有引号。 请阅读上面。"当前,$ 1和$ 2在开头和结尾都有硬编码的引号。$ onam和$ dnam是没有硬编码引号的等效项。"

采用:

mv"$onam""$dnam"

基本上,对包含可能包含空格的文件名的变量使用引号。但是,值本身不应包含引号,除非文件名或目录名称本身包含引号。

不幸的是,我无法立即想到一种简单的方法来使用像$1这样的值,并在其周围加上引号。您必须弄乱eval或附近。

SSCCE(简短,独立,正确的示例)

该代码与您显示的代码是同构的,但实际上还有更多功能。运行并清理自身也很安全。假定您正在使用bash。请注意,带空格的名称在一行中包含多个空格。如果您尝试使用包含单个空格的名称,则很容易被误认为是一种错误的安全感。

#!/bin/bash

testdir=test.$$

mkdir"$testdir" || exit 1

trap"rm -fr '$testdir'; exit 1" 0 1 2 3 13 15

(

set -x

x=$'

'

cd test.$$

basedir="$PWD"

sub1dir="rename  test"

sub2dir="Test   Folder"

subdir="$sub1dir/$sub2dir"

mkdir -p"$basedir/$subdir"

oldfile="test   file"

cp /etc/group"$basedir/$subdir/$oldfile"

echo"$x"

ls -lR .

echo"$x"

newfile=$(echo"$oldfile" | sed 's/ /-/g')

mv"$basedir/$subdir/$oldfile""$basedir/$subdir/$newfile"

ls -lR .

echo"$x"

new2dir=$(echo"$sub2dir" | sed 's/ /-/g')

mv"$basedir/$subdir" "$basedir/$sub1dir/$new2dir"

ls -lR .

echo"$x"

new1dir=$(echo"$sub1dir" | sed 's/ /-/g')

mv"$basedir/$sub1dir""$basedir/$new1dir"

ls -lR .

)

rm -fr"$testdir"

trap 0

#    $ mv"/home/bryan/renametest/TestFolder/test   file""/home/bryan/renametest/TestFolder/test---file"

#

#Here are some inputs and results.

#

#    mv $1 $2

#    mv: cannot stat `"/home/bryan/renametest/TestFolder/test   file"': No such file or directory

#

#    mv $onam $dnam

#    mv: cannot move `/home/bryan/renametest/TestFolder' to a subdirectory of itself, `/home/bryan/renametest/TestFolder/test---file'

#

#    mv $1 $dnam

#    mv: cannot stat `"/home/bryan/renametest/TestFolder/test   file"': No such file or directory

#

#    mv $onam $2

#    mv: cannot move `/home/bryan/renametest/TestFolder' to `"/home/bryan/renametest/TestFolder/test---file"': No such file or directory

#

#Ideas?

您一定要小心;请注意我是如何从片段中建立名称并对其进行分解等的。但是,只要小心,就可以做到。

示例输出

使用bash -x运行,但是您可以仅使用bash运行它,而只跳过一些输出,因为它在子外壳程序代码中包含set -x。

+ testdir=test.47648

+ mkdir test.47648

+ trap 'rm -fr '\''test.47648'\''; exit 1' 0 1 2 3 13 15

+ set -x

+ x='

'

+ cd test.47648

+ basedir=/Users/jleffler/tmp/soq/x3/test.47648

+ sub1dir='rename  test'

+ sub2dir='Test   Folder'

+ subdir='rename  test/Test   Folder'

+ mkdir -p '/Users/jleffler/tmp/soq/x3/test.47648/rename  test/Test   Folder'

+ oldfile='test   file'

+ cp /etc/group '/Users/jleffler/tmp/soq/x3/test.47648/rename  test/Test   Folder/test   file'

+ echo '

'

+ ls -lR .

total 0

drwxr-xr-x  3 jleffler  staff  102 Apr  3 18:43 rename  test

./rename  test:

total 0

drwxr-xr-x  3 jleffler  staff  102 Apr  3 18:43 Test   Folder

./rename  test/Test   Folder:

total 8

-rw-r--r--  1 jleffler  staff  2151 Apr  3 18:43 test   file

+ echo '

'

++ echo 'test   file'

++ sed 's/ /-/g'

+ newfile=test---file

+ mv '/Users/jleffler/tmp/soq/x3/test.47648/rename  test/Test   Folder/test   file' '/Users/jleffler/tmp/soq/x3/test.47648/rename  test/Test   Folder/test---file'

+ ls -lR .

total 0

drwxr-xr-x  3 jleffler  staff  102 Apr  3 18:43 rename  test

./rename  test:

total 0

drwxr-xr-x  3 jleffler  staff  102 Apr  3 18:43 Test   Folder

./rename  test/Test   Folder:

total 8

-rw-r--r--  1 jleffler  staff  2151 Apr  3 18:43 test---file

+ echo '

'

++ echo 'Test   Folder'

++ sed 's/ /-/g'

+ new2dir=Test---Folder

+ mv '/Users/jleffler/tmp/soq/x3/test.47648/rename  test/Test   Folder' '/Users/jleffler/tmp/soq/x3/test.47648/rename  test/Test---Folder'

+ ls -lR .

total 0

drwxr-xr-x  3 jleffler  staff  102 Apr  3 18:43 rename  test

./rename  test:

total 0

drwxr-xr-x  3 jleffler  staff  102 Apr  3 18:43 Test---Folder

./rename  test/Test---Folder:

total 8

-rw-r--r--  1 jleffler  staff  2151 Apr  3 18:43 test---file

+ echo '

'

++ echo 'rename  test'

++ sed 's/ /-/g'

+ new1dir=rename--test

+ mv '/Users/jleffler/tmp/soq/x3/test.47648/rename  test' /Users/jleffler/tmp/soq/x3/test.47648/rename--test

+ ls -lR .

total 0

drwxr-xr-x  3 jleffler  staff  102 Apr  3 18:43 rename--test

./rename--test:

total 0

drwxr-xr-x  3 jleffler  staff  102 Apr  3 18:43 Test---Folder

./rename--test/Test---Folder:

total 8

-rw-r--r--  1 jleffler  staff  2151 Apr  3 18:43 test---file

+ rm -fr test.47648

+ trap 0

mv" $ onam"" $ dnam" mv:无法移动homebryanrenametestTestFolder to a subdirectory of itself, / home / bryan / renametest / TestFolder / test ---文件

$ onam = / home / bryan / renametest / TestFolder / test文件

那是一个单独的问题。您显然正在尝试将文件夹移动到新位置,并且该新位置是其当前位置的子目录。您显示的错误消息与$onam的声明值不一致。在问题的更新中显示sh -x yourscript的输出以及您提供的任何团(以便您可以正确格式化输出)。

否。如果检查onam的值,您将看到mv命令正在破坏该值,因为" test"和" file"之间存在空格。我已经给出了onam的确切值。 1等同于onam,但带有硬编码的引号。

请参阅SSCCE。如果您在研究后仍然有问题,请提供您自己的SSCCE类似物,我们可以看到差异之处。

好,谢谢。我会尽快给您回复。

谢谢乔纳森。在您的帮助下,我已经修复了该部分。现在,我有另一个(我认为)应该很简单。

您可以使用bash变量替换-onam="the file"; echo ${onam -}-> the--file将空格更改为破折号而无需sed

@evilotto:是的,但是旧习惯很难消亡,而且25年及以上的旧习惯导致了很多杀戮。

linux mv文件个数,关于linux:mv一个文件,其中包含Shell脚本中的空格相关推荐

  1. Linux教程 - 在Shell脚本中声明和使用布尔变量示例

    需要定义一个名为failed的bash变量,并将值设置为False.当从cron作业调用我们的脚本时,特定的任务可能会失败,然后我需要将failed转换为True.基于$failed,我需要发送一封电 ...

  2. 【linux】Shell脚本中调用另外一个脚本的方法

    在Linux平台上开发,经常会在console(控制台)上执行另外一个脚本文件,经常用的方法有:./my.sh 或 source my.sh 或 . my.sh:这三种方法有什么不同呢?我们先来了解一 ...

  3. Linux的简单shell脚本中修改文件操作

    Linux的简单shell脚本中修改文件操作 Linux Shell常用技巧(三) sed 八.流编辑器sed 8.1 sed简介 sed是stream editor的缩写,一种流编辑器,它一次处理一 ...

  4. linux shell 获取表,bash - 如何获取shell脚本中目录中的文件列表?

    bash - 如何获取shell脚本中目录中的文件列表? 我试图使用shell脚本获取目录的内容. 我的脚本是: for entry in `ls $search_dir`; do echo $ent ...

  5. Linux下将数据文件的指定域读取到shell脚本中

    Linux下将数据文件的指定域读取到shell脚本中 这个例子说明了怎样在Linux下shell脚本中从数据文件读取特定的域(field)并进行操作.例如,假设文件employees.txt的格式是{ ...

  6. linux脚本中如何读取文件,如何在Shell脚本中逐行读取文件

    原标题:如何在Shell脚本中逐行读取文件 在这里,我们学习Shell脚本中的3种方法来逐行读取文件. 方法一.使用输入重定向 逐行读取文件的最简单方法是在while循环中使用输入重定向. 为了演示, ...

  7. linux判断文件类型是否存在脚本,shell脚本中的逻辑判断 文件目录属性判断 if特殊用法 case判断...

    一.shell脚本中的逻辑判断 在shell脚本中,很多都会逻辑判断,判断某一个数值,判断某一个文件,或者某一个目录,我们针对判断结果再做一些操作,如果没有判断,就没法做一些操作 格式1:if条件:t ...

  8. linux shell 读取csv文件内容,在Shell脚本中读取CSV文件,直到没有标题的行结束

    我有一个名为'readfile.csv'的文件,其中包含以下内容. Name Id VAl Number IP James,007,$500,111-111-111,111-000-000 Bond, ...

  9. linux shell rsync,linux – 如何在我的下面的shell脚本中使用rsync而不是scp来复制文件?...

    我正在使用scp并行使用GNU并行复制文件与我的下面的 shell脚本,它工作正常. 我不知道如何在下面的shell脚本中使用rsync代替scp.我试图看看rsync与传输速度方面的scp相比是否会 ...

  10. linux exec 脚本之家,详解Shell脚本中调用另一个Shell脚本的三种方式

    主要以下有几种方式: Command Explanation fork 新开一个子 Shell 执行,子 Shell 可以从父 Shell 继承环境变量,但是子 Shell 中的环境变量不会带回给父 ...

最新文章

  1. 元素周期表超清pdf_重磅分享||化学II卷5个大题汇编PDF
  2. 【NOIP普及组】2016模拟考试(10.29)——排座椅
  3. Controller 如果能保持单例,尽量使用单例
  4. (PCB)进程控制块
  5. Docker多步构建更小的Java镜像
  6. 使用Java从地图中删除元素
  7. 2020计算机二级题库第14PPT,计算机二级考试MSOffice考精彩试题库ppt操作题附问题详解.doc...
  8. java二叉树原理_史上最全二叉树遍历详解(Java实现,原理相同)
  9. linux 系统信号忽略和system函数返回值问题(system的实现)
  10. B端产品运营基本工作内容
  11. 20194307肖江宇Exp-4 恶意代码分析
  12. 成功解决windows系统开机时,系统提示此windows副本不是正版
  13. Springboot配置Redis报:io.lettuce.core.RedisCommandExecutionException: NOAUTH Authentication required.
  14. linux下罗技摄像头采集图片,网络摄像头罗技和Linux
  15. spring boot rest例子
  16. 谷歌浏览器提示客户端和服务器不支持一般 SSL 协议版本或加密套件(亲测有效)
  17. @PersistenceContext和@Autowired在EntityManager上应用的区别。
  18. 做梦都想复习的网络编程
  19. vscode安装python插件失败_vscode安装python插件
  20. 灰度图像压缩 DP算法 位运算详解

热门文章

  1. 获取 Panabit Linux 版 root 密码
  2. 红帽子linux转中文后乱码,安装redhat时中文显示乱码(小方框)解决方法
  3. EFI Driver Model(中)-PCI 驱动设计
  4. jupyter notebook如何导入excel数据
  5. word公式快捷键使用
  6. 命令行视频下载工具-dl
  7. c语言pow函数原型_c语言pow的用法
  8. 在 OpenBSD 系统下的安装PHP
  9. 模型解释器-LIME
  10. 简单模仿赛尔号哈莫雷特对战谱尼最难打的第五条命