【问题标题】:Bash: Moving multiple files into subfoldersBash:将多个文件移动到子文件夹中
【发布时间】:2011-08-18 10:43:39
【问题描述】:

我有一个包含几千个文件的文件夹,我想根据文件名中的字符串将它们移动到子文件夹中。这些文件都具有类似的结构

something-run1_001.txt

something-run22_1243.txt

所以我尝试了以下脚本,以便将其中包含“run1”的所有文件移动到子文件夹 r1 中,并将所有“run22”文件移动到子文件夹 r22 中(依此类推),但它不起作用,我得到了一条消息“文件 X 与文件 X 相同”。

#!bin/bash

for i in {1..39}
do
foldername=r$i
#echo "$foldername"
mkdir $foldername
find . -type f -name "*run$i_*" | xargs -i mv {} $foldername/ 
done

如何解决?

【问题讨论】:

    标签: bash find move


    【解决方案1】:

    这是您的要求吗?

    mv *run*.html dir1

    【讨论】:

      【解决方案2】:
      for i in {1..39}
      do
        mkdir -p r${i}/
        mv *run${i}_* r${i}/
      done
      

      【讨论】:

      • 这么简单...我之前尝试过类似(但不一样)的东西,但遇到了“参数太多”的陷阱。
      【解决方案3】:

      如果您仍然遇到“参数过多”的陷阱,您可以通过管道将 find 放入 while 循环中

      #!/bin/bash -u
      find . -maxdepth 1 -name '*-run*_*.txt' |
      {
          while read FNAME
          do
              N=${FNAME##*-run}
              N=${N%_*}
              DIR=r$N
              test -d $DIR || mkdir $DIR
              mv $FNAME $DIR/.
          done
      }
      

      【讨论】:

      • 我认为我首先遇到它的原因是我没有将 ${i} 与额外的 {} 一起使用。我还没有对此进行过广泛的测试,因为 Erik 的解决方案成功了。 find 是一个非常强大的东西,但是我可能应该阅读一些关于它的内容......
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-07-17
      • 2015-07-30
      • 2022-07-17
      • 1970-01-01
      • 2022-10-25
      • 1970-01-01
      • 2020-03-29
      相关资源
      最近更新 更多