我有一个目录,其中有许多文件的名称非常长且重复,我想从每个文件名中删除前 16 个字符。
所以我想像这样重命名文件:
0123456789012345file1.fits
0123456789012345file2.fits
Run Code Online (Sandbox Code Playgroud)
对此:
file1.fits
file2.fits
Run Code Online (Sandbox Code Playgroud)
我希望能够从终端中的命令行执行此操作。
我正在尝试从多个目录中的多个文件名中删除一个字符串。这是与创建的一些文件一样的文件,以便我可以检查实际设置的值。
当我到达rename最底部时,我收到一个错误:
命令的语法不正确。
我没有看到创建的文件_intf和文本文件有任何问题。_fnlf在重命名中使用变量作为文件路径是否有一些技巧?
@ECHO off
echo Delete dir.txt?
PAUSE
del dir.txt
del item.txt
del file.txt
::paths for all directories in root (where filerename.bat is run)
::get root dir path
SET "_c=%CD%"
SET /A "counter=0"
::get dir list and concats root dir path before
FOR /F "tokens=*" %%A in ('DIR /on /b /a:d /p %svnLOCAL%') DO (
SET "_dirp=%_c%\%%A"
CALL :sub1
SET /A "_counter+=1"
)
::finds each file in dir
:sub1
::make file to …Run Code Online (Sandbox Code Playgroud) 该pathlib.Path.replace方法的文档指出:
将此文件或目录重命名为给定的目标。如果目标指向现有文件或目录,它将被无条件替换。
这缺少一些细节。为了进行比较,这里是 的文档os.replace:
将文件或目录重命名
src为dst. 如果dst是目录,OSError将被引发。如果dst存在并且是一个文件,如果用户有权限,它将被静默替换。如果src和dst位于不同的文件系统上,操作可能会失败。如果成功,重命名将是一个原子操作(这是 POSIX 要求)。
最重要的部分是“操作可能会失败,如果src和dst在不同的文件系统”。不像os.replace,shutil.move没有这个问题:
如果目标在当前文件系统上,则
os.rename()使用。否则,src复制到dst使用copy_function然后删除。
那么,这些函数中的哪一个正在Path.replace使用?Path.replace由于目标位于不同的文件系统上,是否有失败的风险?
我遇到了这个问题,其中 sftpChannel.rename 失败,错误不是很有帮助,我想不出原因。目标中不存在文件。权限很好,因为 mv 命令有效。我将列出文件和文件夹的权限。有人有任何想法吗?我不必使用该目录,但不知道为什么会失败令人沮丧。
这是一段测试代码。RemoteFile 只是 sftpChannel 的包装器,因此我可以检查文件/目录是否存在并在必要时删除文件或创建目录:
String file = "/u01/apps/tpms/applstg2/ken_test/TestFile";
String destDir = "/usr/local/jboss/server/applstg2/backup/"; // Caused by: 4: Failure
//String destDir = "/u01/apps/tpms/applstg2/ken_test/backup/"; // Success
RemoteFile remoteFile = new RemoteFile(file, ssh.openSftpChannel());
remoteFile.rename(destDir + "/TestFile");
Run Code Online (Sandbox Code Playgroud)
这是失败的行:
sftpChannel.rename(file, newName);
Run Code Online (Sandbox Code Playgroud)
这是跟踪(我删除了所有 JUnit 和 sun.reflect 跟踪):
Error renaming file /u01/apps/tpms/applstg2/ken_test/TestFile to /usr/local/jboss/server/applstg2/backup//TestFile
at com.framework.remote.RemoteFile.rename(RemoteFile.java:82)
at com.framework.remote.RemoteFileTest.renameFile(RemoteFileTest.java:56)
Caused by: 4: Failure
at com.jcraft.jsch.ChannelSftp.throwStatusError(ChannelSftp.java:2846)
at com.jcraft.jsch.ChannelSftp.rename(ChannelSftp.java:1923)
at com.framework.remote.RemoteFile.rename(RemoteFile.java:79)
Run Code Online (Sandbox Code Playgroud)
权限:
drwxrwxr-x 2 applstg2 applstg2 4096 May 2 22:09 ken_test
-rw-rw-r-- 1 applstg2 applstg2 61595086 …Run Code Online (Sandbox Code Playgroud) 为什么这个脚本不起作用?
for filename in bre*; do
rename 's/bre//';
done
Run Code Online (Sandbox Code Playgroud)
我在目录中有以 bre 开头的文件,我想从文件名中删除这部分。它正在运行,什么都不会发生,它还没有完成。谢谢
我正在编写一个使用 git 的脚本。它需要知道所有重命名的目录和文件的旧文件路径和新文件路径。
我想要做的示例:git diff --find-renames-only someGitHash someGitHash
然后我想看到一个如下列表:
rename old/path/old-file-name.extension->new/path/new-file-name.extension
或者
rename from source/README.md
rename to documentation/README.md
Run Code Online (Sandbox Code Playgroud)
或者类似的东西,只要它具有带有旧目录路径的旧文件名和带有新目录路径的新文件名。
到目前为止,我到处乱逛和搜索,我能找到的最接近的东西是git diff --find-renames
git diff --find-renames为我提供了我想要的数据,但每个文件的数据太多。这绝对不是我想要处理和解析的事情。我正在使用的一些 git 存储库可能有数千个文件/文件夹重命名...
例子:
...tons more data that I do not want to parse through
rename from source/README.md
rename to documentation/README.md
...tons more data including diffs of files before and after...
this pattern continued for each file...
Run Code Online (Sandbox Code Playgroud)
如何在没有额外数据的情况下列出两次 git 提交之间的所有文件和目录重命名?
任何帮助将不胜感激,谢谢!
我在一个文件夹中有一组文件。我想通过将文件名的一部分移动到不同位置来编辑所有文件名。这是我所拥有的样本:
Par1_MD_0_5_AL_2_ND_4_Dist_0_Pot_Drop_out.txt
Par1_MD_0_5_AL_2_ND_4_Dist_1_Pot_Drop_out.txt
Par1_MD_0_5_AL_2_ND_6_Dist_2_Pot_Drop_out.txt
Par1_MD_0_5_AL_2_ND_8_Dist_3_Pot_Drop_out.txt
Run Code Online (Sandbox Code Playgroud)
这就是我想要的:
Par1_MD_0_5_AL_2_Dist_0_ND_4_Pot_Drop_out.txt
Par1_MD_0_5_AL_2_Dist_1_ND_4_Pot_Drop_out.txt
Par1_MD_0_5_AL_2_Dist_2_ND_6_Pot_Drop_out.txt
Par1_MD_0_5_AL_2_Dist_3_ND_8_Pot_Drop_out.txt
Run Code Online (Sandbox Code Playgroud)
基本上,我想在“Dist_(number)”之后放置“ND_(number)”
感谢您的帮助。
regex powershell file-rename batch-rename rename-item-cmdlet
所以我有一个 jpg 格式的文件夹中的文件列表,如下所示:
"1.George ABCD.jpg"
"2.George ABCD.jpg"
"3.Mead ABCD.jpg"
Run Code Online (Sandbox Code Playgroud)
所以我想要做的是重命名它们,以便前缀成为像这样的后缀:
"George ABCD 1.jpg"
"George ABCD 2.jpg"
"Mead ABCD 2.jpg"
Run Code Online (Sandbox Code Playgroud)
我想让它通过子文件夹递归工作。
我有一个我试过的代码段在这里工作:
ls -Recurse |? BaseName -match '^(\d+\.)([^0-9].*)$' |ren -new {"{0}{1}{2}" -f $matches[2],' ', $matches[1].substring(0,1)+ $_.extension}
cmd /c pause
Run Code Online (Sandbox Code Playgroud)
现在的问题是我的一段代码目前不适用于双位数名称,例如:
"11.George ABCD.jpg"
Run Code Online (Sandbox Code Playgroud)
相反,它的作用是吐出
"George ABCD 1.jpg"
Run Code Online (Sandbox Code Playgroud)
这不是我想要的,我知道这与一位或多位数字的正则表达式 d+ 有关,但我不确定我应该使用什么来使其对一位或多位数字正常工作。
那就是我希望“11.George ABCD.jpg”的输出为“George ABCD 11.jpg”。
有什么办法可以解决这个问题吗?
在这里,这个 renameFile(..) func 在 Android API 30 中工作。但是,它在 Android API 29 中不起作用并显示如下错误:
java.lang.IllegalArgumentException:不允许移动不属于明确定义集合的内容://media/external/file/116
更新-注意:
---开始---
为了使用 sdk-29,我们必须使用 Uri 作为 extUri = MediaStore.Downloads.getContentUri(MediaStore.VOLUME_EXTERNAL) 像:
private static Uri extUri = MediaStore.Downloads.getContentUri(MediaStore.VOLUME_EXTERNAL);
Run Code Online (Sandbox Code Playgroud)
代替下面的代码。并将MediaStore.Files.FileColumns更新为MediaStore.Downloads
---结束---
Uri extUri = MediaStore.Files.getContentUri(MediaStore.VOLUME_EXTERNAL);
String relativeLocation = Environment.DIRECTORY_DOWNLOADS + File.separator + "AppFolder";
Run Code Online (Sandbox Code Playgroud)
函数重命名文件(...)
boolean renameFile(Context context, String newName, String displayName) {
try {
Long id = getIdFromDisplayName(displayName);
ContentResolver contentResolver = context.getContentResolver();
Uri mUri = ContentUris.withAppendedId(extUri, id);
ContentValues contentValues = new ContentValues();
contentValues.put(MediaStore.Files.FileColumns.IS_PENDING, 1);
contentResolver.update(mUri, contentValues, null, …Run Code Online (Sandbox Code Playgroud) 我想从以最后一个开头的字符串中删除任何后缀.svc.。例如:
abc.svc.cluster.local => abc
abc.svc.svc.cluster.local => abc.svc
abc.txt => abc.txt
abc.svc.xyz.svc.zzz => abc.svc.xyz
svc.xxx=> svc.xxx(.在 svc 之前丢失)
如果我这样做是Go,我会找到子字符串的最后一个索引,.svc.然后从该索引中修剪。
我如何在 bash 中做到这一点?谢谢。
file-rename ×10
batch-rename ×3
rename ×3
bash ×2
java ×2
powershell ×2
regex ×2
android ×1
android-10.0 ×1
batch-file ×1
diff ×1
file-move ×1
git ×1
git-diff ×1
glob ×1
jsch ×1
loops ×1
mediastore ×1
pathlib ×1
python ×1
sftp ×1