如何在没有扩展名且没有路径的情况下获取文件名?
以下给我没有扩展,但我仍然附加路径:
source_file_filename_no_ext=${source_file%.*}
Run Code Online (Sandbox Code Playgroud) 给定这样的文件名:
/the/path/foo.txt
bar.txt
Run Code Online (Sandbox Code Playgroud)
我希望得到:
foo
bar
Run Code Online (Sandbox Code Playgroud)
为什么这不起作用?
#!/bin/bash
fullfile=$1
fname=$(basename $fullfile)
fbname=${fname%.*}
echo $fbname
Run Code Online (Sandbox Code Playgroud)
什么是正确的方法呢?
我有一个大约1,700个文件的文件夹.它们都被命名为1.txt或1497.txt等.我想重命名所有文件,以便所有文件名都是四位数.
即,23.txt成为0023.txt.
什么是shell脚本才能执行此操作?或者一个相关的问题:我如何使用grep只匹配包含的行\d.txt(即一个数字,然后一个句点,然后是字母txt)?
这是我到目前为止所拥有的:
for a in [command i need help with]
do
mv $a 000$a
done
Run Code Online (Sandbox Code Playgroud)
基本上,运行三次,使用命令找到一位数,两位数和三位数文件名(初始零的数量已更改).
我有以下bash脚本:
tar -zxvf $1
cd $1
Run Code Online (Sandbox Code Playgroud)
它应该提取存档文件并输入已创建的目录.通常,包归档文件创建具有相同名称的目录,如文件,没有扩展名,例如,mpc-1.0.1.tar.gz创建mpc-1.0.1目录.如何更改行cd $1以获取目录名称?存档文件有几个扩展名:tar.gz,tat.xz,tar.bz2.
我的服务器中有一个包含一些文件的文件夹.这些都是自动化的,这意味着我们每天都会自动获取新文件,这将覆盖旧文件.所以想要备份这些数据.如何通过在复制时使用当前日期重命名文件,将所有这些文件复制到另一个文件夹中.
例如:我有一个名为folder1的文件夹,其中包含4个文件.此文件夹的路径是home/webapps/project1/folder1
现在我想将所有这四个文件复制到名为folder2的不同文件夹中.此文件夹的路径是home/webapps/project1/folder2.复制这些文件时,我想重命名每个文件并将当前日期添加到文件中.所以我在folder2中的文件名应该是..
我想为此编写一个shell脚本.请给我一些想法或一些与此相关的示例脚本.
我有一个shell脚本,如果文件是压缩的(以.gz结尾),我需要执行一个命令,如果不是,则需要执行另一个命令.我不确定如何处理这个,这里是我正在寻找的概述:
file=/path/name*
if [ CHECK FOR .gz ]
then echo "this file is zipped"
else echo "this file is not zipped"
fi
Run Code Online (Sandbox Code Playgroud) 我有一个结尾的文件名,.zip我只想要没有zip的文件名.在这里,我在bash中找到了一个技巧.
$f="05 - Means-End Analysis Videos.zip"
$echo "${f%*.zip}"
05 - Means-End Analysis Videos
Run Code Online (Sandbox Code Playgroud)
这里发生了什么?怎么%*.zip删除我的扩展名?
我需要遍历Hadoop文件系统中的所有csv文件.我可以列出HDFS目录中的所有文件
> hadoop fs -ls /path/to/directory
Found 2 items
drwxr-xr-x - hadoop hadoop 2 2016-10-12 16:20 /path/to/directory/tmp
-rwxr-xr-x 3 hadoop hadoop 4691945927 2016-10-12 19:37 /path/to/directory/myfile.csv
Run Code Online (Sandbox Code Playgroud)
并且可以循环遍历标准目录中的所有文件
for filename in /path/to/another/directory/*.csv; do echo $filename; done
Run Code Online (Sandbox Code Playgroud)
但我怎么能把这两者结合起来呢?我试过了
for filename in `hadoop fs -ls /path/to/directory | grep csv`; do echo $filename; done
Run Code Online (Sandbox Code Playgroud)
但这给了我一些废话
Found
2
items
drwxr-xr-x
hadoop
hadoop
2
2016-10-12
....
Run Code Online (Sandbox Code Playgroud) 在bash我尝试glob从目录中的文件列表,以作为程序的输入.但是,我还想给这个程序提供文件名列表
files="/very/long/path/to/various/files/*.file"
Run Code Online (Sandbox Code Playgroud)
所以我可以这样使用它.
prompt> program -files $files -names $namelist
Run Code Online (Sandbox Code Playgroud)
如果glob给我:
/very/long/path/to/various/files/AA.file /very/long/path/to/various/files/BB.file /very/long/path/to/various/files/CC.file /very/long/path/to/various/files/DD.file /very/long/path/to/various/files/ZZ.file
Run Code Online (Sandbox Code Playgroud)
我想获得AA BB CC DD ZZ的列表,以便在没有长路径名和文件扩展名的情况下提供我的程序.但是我不清楚如何从那里开始!任何提示非常感谢!
我有一个bash脚本的一部分,它获取一个没有扩展名的文件名,但我试图了解这里真正发生了什么.什么是"%%"的用途?有人可以详细说明bash在幕后做了什么吗?如何在一般基础上使用这种技术?
#!/bin/bash
for src in *.tif
do
txt=${src%%.*}
tesseract ${src} ${txt}
done
Run Code Online (Sandbox Code Playgroud)