将文件从 1 个目录移动到另一个目录

时间:2021-02-08 14:23:17

标签: shell unix

我想在 UNIX 中将文件从 1 个目录移动到另一个目录。

我在字符串中包含文件名,例如 "File 1.txt, File 2.txt"

所以我想从字符串中提取这些文件名,然后将它们存档到另一个文件夹中。

我尝试过类似的方法,但无法实现整个解决方案 -

echo "Open Incidents 08-02-2021.csv,Closed Incidents 08-02-2021.csv"  | tr "," "\n" | sed -e 's/^/"/g' -e 's/$/"/g' | tr "\n" " " | sed 's/ $//'

输出 - “打开事件 08-02-2021.csv”“关闭事件 08-02-2021.csv”

使用此语法,如您所见,我可以在文件名周围加上引号,因为文件名中有空格且名称之间有空格,但不确定如何将它们传递给mv 命令现在将文件移动到另一个文件夹。

我知道我们可以在 For 循环中做到这一点,但希望有一个没有那个的解决方案。

对此的任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:0)

我认为 xargs 可以解决您的问题:

echo "Open Incidents 08-02-2021.csv,Closed Incidents 08-02-2021.csv"|tr "," "\n"|sed -e 's/^/"/g' -e 's/$/"/g' | tr "\n" " " | sed 's/ $//'|xargs -I mv {} <other_dir>/

{} 将保存上一个命令的输出并将其传递给 mv 命令。

答案 1 :(得分:0)

使用 awk 和 while 循环尝试以下操作:

while read line;
do 
   echo "mv $line /path/to/newdir";
   # mv "$line" "/path/to/newdir";
done <<< "$(awk 'BEGIN { RS="," } { print $0 }' <<< "Open Incidents 08-02-2021.csv,Closed Incidents 08-02-2021.csv")" # Use awk to set the record separator to "," and print each record on a separate line

在去掉注释标签并执行之前验证move命令的echo