目录中有多个以prefix开头的文件fgh,例如:
fghfilea
fghfileb
fghfilec
Run Code Online (Sandbox Code Playgroud)
我想重命名所有这些以前缀开头jkl.是否有单个命令来执行此操作而不是单独重命名每个文件?
编写一个简单的脚本,自动重命名一些文件.作为一个例子,我们希望将文件*001.jpg重命名为用户定义的字符串+ 001.jpg(例如:MyVacation20110725_001.jpg)此脚本的用法是让数码相机照片具有合理的文件名.
我需要为此编写一个shell脚本.有人可以建议如何开始吗?
我有多个目录中的文件,例如:linux_file1.mp4,linux_file2.mp4等等.如何使用shell移动这些文件,以便名称等file1.mp4,file2.mp4以此类推.我有大约30个文件要移动到新名称.
我有类似的文件a_dbg.txt, b_dbg.txt ...在Suse 10系统中.我想编写一个bash shell脚本,它应该通过从中删除"_dbg"来重命名这些文件.
谷歌建议我使用rename命令.所以,我执行命令rename _dbg.txt .txt *dbg*的CURRENT_FOLDER
我的实际CURRENT_FOLDER包含以下文件.
CURRENT_FOLDER/a_dbg.txt
CURRENT_FOLDER/b_dbg.txt
CURRENT_FOLDER/XX/c_dbg.txt
CURRENT_FOLDER/YY/d_dbg.txt
Run Code Online (Sandbox Code Playgroud)
执行rename命令后,
CURRENT_FOLDER/a.txt
CURRENT_FOLDER/b.txt
CURRENT_FOLDER/XX/c_dbg.txt
CURRENT_FOLDER/YY/d_dbg.txt
Run Code Online (Sandbox Code Playgroud)
它没有递归,如何使这个命令重命名所有子目录中的文件.喜欢XX和YY我将有这么多的子目录,其名称是不可预测的.而且我CURRENT_FOLDER也会有一些其他文件.
我想将包含单词"special"的所有文件和目录重命名为"regular".它应该保持区分大小写,因此"特殊"不会变成"常规".
我如何以递归方式执行此操作?
我有一组名为的文件:
Friends - 6x03 - Tow Ross' Denial.srt
Friends - 6x20 - Tow Mac and C.H.E.E.S.E..srt
Friends - 6x05 - Tow Joey's Porshe.srt
Run Code Online (Sandbox Code Playgroud)
我想像下面那样重命名它们
S06E03.srt
S06E20.srt
S06E05.srt
Run Code Online (Sandbox Code Playgroud)
我该怎么做才能在linux终端上完成工作?我已经安装了重命名但是U使用以下方法获得错误:
rename -n 's/(\w+) - (\d{1})x(\d{2})*$/S0$2E$3\.srt/' *.srt
Run Code Online (Sandbox Code Playgroud) 我正在尝试做类似以下的事情:
for file in `find . *.foo`
do
somecommand $file
done
Run Code Online (Sandbox Code Playgroud)
但命令不起作用,因为$ file非常奇怪.因为我的目录树有蹩脚的文件名(包括空格),我需要转义find命令.但是没有明显的转义似乎有效:
-ls给我空格分隔的文件名片段
-fprint没有做得更好.
我也尝试过: for file in "找到.*.foo -ls"; do echo $file; done
- but that gives all of the responses from find in one long line.
任何提示?我很高兴任何解决方法,但我很沮丧,我无法弄清楚这一点.
谢谢,亚历克斯
(嗨马特!)
我有一个目录,/original有数百个文件.我有一个脚本,它将一次处理一个文件并删除该文件,以便在脚本中断时不再执行.所以,我需要一堆软链接到文件上/original到/processing.这是我试过的:
find /original -name "*.processme" -exec echo ln -s {} $(basename {}) \;
有类似的东西:
ln -s /original/1.processme /original/1.processme ln -s /original/2.processme /original/2.processme ln -s /original/3.processme /original/3.processme ...
我想要的东西:
ln -s /original/1.processme 1.processme ln -s /original/2.processme 2.processme ln -s /original/3.processme 3.processme ...
它似乎$(basename)在{}转换之前运行.有办法解决这个问题吗?如果没有,我怎么能达到目标?
我试图用Debian中的脚本删除树中最旧的文件.
find /home/backups -type f \( -name \*.tgz -o -name \*.gz \) -print0 | xargs -0 ls -t | tail -1 | xargs -0 rm
Run Code Online (Sandbox Code Playgroud)
但我收到一个错误:
rm: cannot remove `/home/backups/tree/structure/file.2011-12-08_03-01-01.sql.gz\n': No such file or directory
Run Code Online (Sandbox Code Playgroud)
任何想法我做错了(或者有更容易/更好的方式?),我尝试过RTFM,但我迷路了.
我熟悉为bash中的命令输入创建"临时文件",例如
cat file_1 <(echo hello) file_2
Run Code Online (Sandbox Code Playgroud)
我想更多地了解这个主题,但我不知道<( )运营商的名字.我怀疑这是一种IO重定向.
这个符号/运算符有名字吗?
尝试回答使用Bash/Perl根据每个文件的名称修改文件我结束了一个我不知道如何使用find和sed一起使用的点.
假设存在某种文件结构,我们想要更改一行,附加文件名.
如果是正常for循环,我们会这样做:
for file in dir/*
do
sed -i "s/text/text plus $file/g" $file
done
Run Code Online (Sandbox Code Playgroud)
但是,假设我们想要find用来更改所有子目录中的文件.在这种情况下,我会用...
find . -type f -exec sed -i "s/text/text plus {}/g" {} \;
^
it does not like this part
Run Code Online (Sandbox Code Playgroud)
但这些{}内sed是不能接受的,我得到的错误
sed:-e expression#1,char 20:`s'的未知选项
我发现了一些类似的问题(1),但在这种情况下,我无法将其概括为足以让我理解.
我相信你们会为此提供一个很好的解决方案.谢谢!