如何检查文件夹中是否有任何制表符分隔文件?

时间:2018-04-12 17:14:02

标签: bash

我正在尝试在一个文件夹中搜索所有制表符分隔文件,如果找到,则需要使用bash将所有文件传输到另一个文件夹。

在我的代码中,我目前正在尝试查找所有文件,但不知何故它无法正常工作。

这是我的代码:

>nul 2>nul dir /a-d "folderName\*" && (echo Files exist) || (echo No file found)

提前致谢:)

3 个答案:

答案 0 :(得分:5)

对于一个简单的移动(或复制 - 用import socket host = '192.168.1.158' port = 13803 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect((host, port)) s.send(("@Action.HelloWorld.ers").encode()) s.close() 替换mv)文件,@ tripleee的回答就足够了。为了递归搜索文件并在每个文件上运行命令,cp派上用场。

示例:

find

其中find <src> -type f -name '*.tsv' -exec cp {} <dst> \; 是要从复制的目录,<src>是要将复制到的目录。请注意,这会以递归方式搜索,因此任何名称重复的文件都会导致覆盖。您可以将<dst>传递给-i,以便在覆盖前提示:

cp

说明:

find <src> -type f -name '*.tsv' -exec cp -i {} <dst> \;

要了解在没有find <src> -type f -name '*.tsv' -exec cp -i {} <dst> \; ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^^ | | | | | | | | | | | || | | | | | | | | | | | | --- terminator | | | | | | | | | | | --- escape for terminator | | | | | | | | | | --- destination directory | | | | | | | | | --- the path of each file found | | | | | | | | --- prompt before overwriting | | | | | | | --- the copy command | | | | | | --- flag for executing a command (cp in this case) | | | | | --- pattern of files to match | | | | --- flag for specifying file name pattern | | | --- 'f' for a regular file (as opposed to e.g. 'd' for directory) | | --- flag for specifying the file type | --- location to search --- the find command, useful for searching for files 运行实际命令的情况下发生的事情,可以在前面添加find来打印每个命令而不是运行它:

echo

答案 1 :(得分:2)

您的尝试中几乎没有有效的Bash脚本。

mv foldername/*.tsv otherfolder/

如果没有匹配的文件,将会出现错误消息。

答案 2 :(得分:0)

“它不起作用”。这意味着stackoverflow很少。

让我们先来看看你做了什么:

>nul 2>nul dir /a-d "folderName\*"

所以,你正在做一个dir(大多数Linux用户会使用ls,但是在...上

  • / A-d
  • folderName下的所有内容

,输出位于文件nul中。出于调试目的,最好查看nul(做cat nul)中的内容。我敢打赌它是这样的:

dir: cannot access '/a-d': No such file or directory
dir: cannot access 'folderName\*': No such file or directory

这意味着dir退出时出错。因此,echo No file found将被执行。

这意味着你的输出可能是

No file found

这与预期完全一致。

在您的代码中,您说您要查找所有文件。这意味着你想要输出

ls folderName

find folderName

如果你想以递归方式做事。由于jsageryd上面已经解释过find,我不会详细说明。

如果您只想查看该特定目录,可以执行以下操作:

if dir folderName/*.tsv > nul 2>nul ; then
    echo "Files exist"
else
    echo "No file found"
fi

然后从那里开始。