我有一个包含csv文件列表的目录,即
short-books-for-sale.csv
old-books-for-sale.csv
random-books-for-sale-new.csv
我想使用UNIX命令更改目录中的所有文件名。重命名文件时我想删除“#34; books"”之后的所有内容。 输出看起来像这样:
short-books.csv
old-books.csv
random-books.csv
这是我到目前为止所做的,但它仍然无法正常工作。
for f in *.csv; do
awk -F'books' '{print FILENAME}' "$f";
mv "$f" "$f";
done
答案 0 :(得分:2)
不确定您认为awk -F'books' '{print FILENAME}' "$f"
或mv "$f" "$f"
会做什么,但他们实际做的是:
awk -F'books' '{print FILENAME}' "$f"
=>逐行读取文件“$ f”,在每次出现books
时拆分每一行,不再做任何事情,而是为“$ f”中的每一行打印一次“$ f”值。
mv "$f" "$f"
=>尝试将文件“$ f”移动到自身。这显然会产生错误信息,因为它毫无意义。
试试这个:
for f in *books-*.csv; do
echo mv -- "$f" "${f/books-*./books.}"
done
完成测试后删除echo
,以便它变为:
for f in *books-*.csv; do
mv -- "$f" "${f/books-*./books.}"
done
答案 1 :(得分:0)
使用prename
(Perl重命名)单行(如果支持):
prename 's/books[^.]+/books/' *.csv