Unix:提取文件名的一部分并用新名称重命名文件
Unix: extract a part of the filename and rename the file with the new name
我有一个包含 csv 文件列表的目录,即
short-books-for-sale.csv
old-books-for-sale.csv
random-books-for-sale-new.csv
我想使用 UNIX 命令更改目录中的所有文件名。重命名文件时,我想删除 "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
不确定您认为 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
使用 prename
(Perl 重命名)单行(如果支持):
prename 's/books[^.]+/books/' *.csv
我有一个包含 csv 文件列表的目录,即
short-books-for-sale.csv
old-books-for-sale.csv
random-books-for-sale-new.csv
我想使用 UNIX 命令更改目录中的所有文件名。重命名文件时,我想删除 "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
不确定您认为 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
使用 prename
(Perl 重命名)单行(如果支持):
prename 's/books[^.]+/books/' *.csv