我想在UNIX中将文件从一个目录移动到另一个目录。
我在字符串中有文件名,如" 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/ $//'
输出- "Open events 08-02-2021.csv"关闭事件08-02-2021.csv">
使用这种语法,正如您可以看到的输出,我可以在文件名周围加上引号,因为文件名中有空格,名称之间也有空格,但是不确定如何将这些传递给mv命令,以便将文件移动到另一个文件夹。
我知道我们可以在For循环中做到这一点,但我希望有一个没有这个的解决方案。
如果有任何帮助,我将不胜感激。
使用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命令的回显我认为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
命令。