我想在 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 循环中做到这一点,但希望有一个没有那个的解决方案。
对此的任何帮助将不胜感激。
答案 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