我想使用Shell读取CSV文件, 但由于某种原因,它不起作用。
我用它来查找我的csv文件夹中最新添加的csv文件
lastCSV=$(ls -t csv-output/ | head -1)
这就算数了。
wc -l $lastCSV
输出
wc: drupal_site_livinglab.csv: No such file or directory
如果我回复文件,则说:drupal_site_livinglab.csv
答案 0 :(得分:0)
您的问题是,您正在尝试阅读的路径中的一个目录。快速修复将是wc -l "csv-output/$lastCSV"
。
请记住,虽然方便,解析ls -t
并不完全健壮,所以你应该考虑这样的事情来保护你免受笨拙的文件名的侵害:
last_csv=$(find csv-output/ -mindepth 1 -maxdepth 1 -printf '%T@\t%p\0' |
sort -znr | head -zn1 | cut -zf2-)
wc -l "$last_csv"
find
列出所有文件及其上次修改时间,使用空字节分隔输出以避免文件名笨拙的问题。
-maxdepth 1
,则会成为递归搜索sort
将文件从最新到最旧排列,-z
接受空字节分隔的输入。head -z
返回排序列表中的第一条记录。cut -z
会丢弃时间戳,只留下文件名。您也可以将find
替换为stat
(同样,假设您拥有GNU coreutils):
last_csv=$(stat csv-output/* --printf '%Y\t%n\0' | sort -znr | head -zn1 | cut -zf2-)