すべてのシンボリック リンクが 1 つの大きなフラット フォルダーに配置される、ネストされたディレクトリ構造内の各ファイルのシンボリック リンクを作成し、今では次のコードを作成したいと考えています。
# loop over directory structure:
# for all items in current directory,
# if item is directory, recurse into it;
# else it's a file, then create a symlink for it
def makelinks(folder, targetfolder, cmdprocess = None):
if not cmdprocess:
cmdprocess = subprocess.Popen("cmd",
stdin = subprocess.PIPE,
stdout = subprocess.PIPE,
stderr = subprocess.PIPE)
print(folder)
for name in os.listdir(folder):
fullname = os.path.join(folder, name)
if os.path.isdir(fullname):
makelinks(fullname, targetfolder, cmdprocess)
else:
makelink(fullname, targetfolder, cmdprocess)
#for a given file, create one symlink in the target folder
def makelink(fullname, targetfolder, cmdprocess):
linkname = os.path.join(targetfolder, re.sub(r"[\/\\\:\*\?\"\<\>\|]", "-", fullname))
if not os.path.exists(linkname):
try:
os.remove(linkname)
print("Invalid symlink removed:", linkname)
except: pass
if not os.path.exists(linkname):
cmdprocess.stdin.write("mklink " + linkname + " " + fullname + "\r\n")
したがって、これはトップダウンの再帰であり、最初にフォルダー名が出力され、次にサブディレクトリが処理されます。これをいくつかのフォルダーで実行すると、10個ほどのシンボリックリンクの後で全体が停止します。
プログラムはまだ実行されているようですが、新しい出力は生成されません。# tag & reencode
フォルダ内のいくつかのファイルと、フォルダ内の最初の 3 つのファイルに対して 9 つのシンボリック リンクが作成されましたChillOutMix
。cmd.exe ウィンドウはまだ開いていて空で、タイトル バーに、現在 の 3 番目のファイルの mklink コマンドを処理中であることが示されていますChillOutMix
。
time.sleep(2)
Pythonがcmdプロセスに対して速すぎる場合に備えて、それぞれの後に挿入しようとしましたcmdprocess.stdin.write
が、役に立ちません。
問題が何であるかを知っている人はいますか?