-2

在 Debian Linux 上,我有大量的文本文件,组织在一个大文件夹树中。我需要的是找到所有具有特定名称模式的文本文件,然后将包含的文件夹移动到目的地。

例子:

/home/spenx/src/a12/a1a22.txt
/home/spenx/src/a12/a1a51.txt
/home/spenx/src/a12/a1b61.txt
/home/spenx/src/a12/a1x71.txt

/home/spenx/src/a167/a1a22.txt
/home/spenx/src/a167/a1a51.txt
/home/spenx/src/a167/a1b61.txt
/home/spenx/src/a167/a1x71.txt

命令:

find /home/spenx/src -name "a1a2*txt"
mv /home/spenx/src/a12 /home/spenx/dst
mv /home/spenx/src/a167 /home/spenx/dst

结果:

/home/spenx/dst/a12/a1a22.txt
/home/spenx/dst/a167/a1a22.txt

感谢您的帮助。

SK

4

5 回答 5

5

finddirname的组合应该mv可以xargs解决您的问题

find /home/spenx/src -name "a1a2*txt" | xargs -n 1 dirname | xargs -I list mv list /home/spenx/dst/

find将获取文件列表

dirname将提取文件的路径。请注意,一次只能接受一个参数

mv将源目录移动到目标

xargs是允许将一个命令的输出作为参数传递给下一个命令的关键

有关与 一起使用的选项的详细信息xargs,请参阅其在终端上执行的手册页man xargs

于 2013-09-27T18:40:23.217 回答
2

你可以执行:

    find /home/spenx/src name "a1a2*txt" -exec mv {} /home/spenx/dst \;

字体:http ://www.cyberciti.biz/tips/howto-linux-unix-find-move-all-mp3-file.html

于 2013-09-27T18:46:51.633 回答
1

mv.sh在将包含以下内容的当前目录中创建此脚本:

o=$1
d=$(dirname $o)
mkdir /home/spenx/dst/$d 2>/dev/null
mv $o /home/spenx/dst/$d

确保它可以通过以下命令执行:

chmod +x mv.sh

接下来调用这个命令:

find /home/spenx/src -name "a1a2*txt" -exec ./mv.sh {} \;
于 2013-09-27T18:30:54.150 回答
0
find /home/spenx/src -name "a1a2*txt" -exec mv "{}" yourdest_folder \;
于 2013-09-27T18:37:59.000 回答
0

可能有多种方法可以做到这一点,但是,因为看起来您可能在一个目录中有多个匹配项,所以我可能会沿着这条线做一些事情:

find /home/spenx/src -name "a1a2*txt" -print0 | xargs -0 -n 1 dirname | sort -u |
    while read d
    do
      mv "${d}" /home/spenx/dst
    done

它有点长,但步骤是:

  1. 查找所有匹配文件(find部分)的列表,-print0用于补偿其中包含空格或其他奇数字符的任何名称
  2. 提取每个文件名的目录部分(xargs ... dirname部分)
  3. 对列表进行排序和唯一化以消除重复项
  4. 将结果列表输入一个循环,依次移动每个目录
于 2013-09-27T18:45:25.847 回答