仅移动列表中出现的文件

仅移动列表中出现的文件

我有一个包含一些名称/ID 的列表,并且在同一目录中有来自该列表的原始文件。我试图找到如何将原始文件移动到另一个文件夹,但仅限于出现在列表中的文件?

所以我的 list/txt 文件如下所示:

2mtz.pdb
2lbq.pdb
2kad.pdb

和我的原始文件有完全相同的 ID,但我必须找到一种方法来仅移动列表中的文件。

答案1

以下是两个使用while循环的例子。


在下一个示例中,调用文件的内容list将被重定向到while循环,其中每一行将作为read变量的值$FILE_NAME,该变量将用作mv命令中的参数。

while IFS= read -r FILE_NAME; do mv "$FILE_NAME" "/dest/dir/"; done < /path/to/list

在下一个示例中,该命令cat将输出名为 的文件的内容list。输出将通过管道传输到while循环,其中每一行将作为read变量 的值$FILE_NAME,该变量将用作mv命令中的参数。

cat /path/to/list | while IFS= read -r FILE_NAME; do mv "$FILE_NAME" "/dest/dir/"; done

我认为使用重定向是更好的方法。下面提供了有关此用法的更详细说明whileWhile 循环仅处理 ssh 命令的第一个条目

答案2

在 Unix 中,如果我们努力尝试,文件名可能会包含各种意想不到的字符。只要有可能,我们通常避免在文件名和目录中使用空格、'?'、'\n'、'('、'*' 等。

如果您的文件名没有“空格”和其他奇怪的字符,请尝试:

mv $(cat list/txt) destination/dir/

答案3

如果列表在文件中,/tmp/list.txt您可以按照以下方式进行:

cat /tmp/list.txt | xargs mv -t /app/dest/

或更短:

xargs mv -t /app/dest/ < /tmp/list.txt

是命令的组合:

mv -t /app/dest/ 

使用选项 -t 或 --target-directory=DIRECTORY 将所有 SOURCE 参数移动到 DIRECTORY

xargs并使用从标准输入执行命令行的命令,但在这种情况下,每一行都是/tmp/list.txt因为我们使用重定向<

感谢其他问答https://unix.stackexchange.com/questions/115734/move-file-by-list-in-file-with-leading-whitespace

相关内容