将名称中包含字符串的文件从一个文件夹复制到另一个文件夹

Abd*_*han 12 command-line bash

我在目录中有一些文件,如下所示。

source_dir: 
ABCD.HRA.0014.2.200.png
ABCD.HRA.0015.2.200.png
ABCD.HRA.0016.2.200.png
MMNP.HRA.0016.2.200.png
Run Code Online (Sandbox Code Playgroud)

我还有一个包含以下内容的文本文件。

text.txt:

ABCD.HRA.0014
ABCD.HRA.0015
Run Code Online (Sandbox Code Playgroud)

现在有什么方法可以按照text.txt. 之后commandsource dir并且dest_dir应该如下。

source_dir: 
ABCD.HRA.0016.2.200.png
MMNP.HRA.0016.2.200.png

dest_dir: 

ABCD.HRA.0014.2.200.png
ABCD.HRA.0015.2.200.png
Run Code Online (Sandbox Code Playgroud)

bac*_*c0n 13

grep -f 允许您使用 text.txt 作为模式的来源。

#!/bin/bash  
for i in source_dir/*.png; do  
  if grep -Fq -f text.txt <<< "$i"; then  
    mv -t dest_dir "$i"  
  fi  
done  
Run Code Online (Sandbox Code Playgroud)
$ ls
dest_dir  script.sh  source_dir  text.txt
Run Code Online (Sandbox Code Playgroud)

grep选项:

  • -F 将模式解释为固定字符串,而不是正则表达式。
  • -q 不要向标准输出写入任何内容。
  • -f 从 FILE 获取模式,每行一个。

这里的字符串:

  • <<< 这里文档的一个变体,在发送字符串之前进行变量扩展。

MV选项:

  • -t将所有源参数移动到-t目录中。


Fel*_*xJN 10

您的文件似乎都以 . 结尾.2.200.png,因此我们只能使用输入文件:

while read line ; do
  mv "source_dir/${line}.2.200.png" destination_dir/
done < text.txt
Run Code Online (Sandbox Code Playgroud)