shell - 将文件复制到父目录中具有相同名称但具有不同扩展名的文件夹

标签 shell

我的文件是

1996-08-30T02.11.41.940_10

1997-03-04T17.24.17.650_17

1997-04-01T15.43.26.390_20

和文件夹是
1996-08-30T02.11.41.940_5.1

1997-03-04T17.24.17.650_5.0

1997-04-01T15.43.26.390_4.5

文件和文件夹位于相同的目录中。我想将文件移动到名称相同但扩展名不同的文件夹
前任:
文件 1996-08-30T02.11.41.940_10 应移至文件夹 1996-08-30T02.11.41.940_5.1

我试过这个,但没有用
for file in ./*T* ; do mv -v $file ${file%_*}; done

最佳答案

你非常接近:

$ for file in ./* ; do [ -f "$file" ] && mv -v "$file" "${file%_*}"*/; done
'./1996-08-30T02.11.41.940_10' -> './1996-08-30T02.11.41.940_5.1/1996-08-30T02.11.41.940_10'
'./1997-03-04T17.24.17.650_17' -> './1997-03-04T17.24.17.650_5.0/1997-03-04T17.24.17.650_17'
'./1997-04-01T15.43.26.390_20' -> './1997-04-01T15.43.26.390_4.5/1997-04-01T15.43.26.390_20'

笔记:
  • 除非您特别希望 shell 处理某些事情,否则始终将 shell 变量放在双引号中。
  • 我们添加了测试 [ -f "$file" ]这样我们只尝试移动常规文件,而不是目录。
  • 该目录将匹配 ${file%_*}"*/ .根据问题描述,我们假设只有一个这样的目录。
  • 关于shell - 将文件复制到父目录中具有相同名称但具有不同扩展名的文件夹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45892678/

    相关文章:

    function - 如何在一行中 mkdir 并切换到新目录

    linux - 如果远程服务器上不存在文件或磁盘已满,则从子 shell 退出 shell 脚本?

    python - 抑制 Python/unittest 的所有输出

    linux - 使用 unix 查找模式并替换文件内的模式

    ruby - 在 Ruby 中拯救 bash/系统 STDERR

    bash - 在 Emacs shell 和 Cygwin 下处理信号

    linux - SSH 持久连接超时

    mysql - 在 shell 上导入 MySQL 转储,文件名中包含变量

    c - 如何检查我的程序返回的值?

    linux - 如何使用没有 '.' 的 bash 文件?